码迷,mamicode.com
首页 > 其他好文 > 详细

【BJOI2019】排兵布阵

时间:2019-08-19 14:35:05      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:--   二维   个人   就是   lis   i++   can   mes   int   

二维背包,不是很难。

看第二个样例时想到,既然吃掉了每一个城堡的某一个人的分,那么所有比那个人派遣兵力小的都可以吃掉,所以就想到了用一维存城堡,二维存第几个玩家的兵力。
所以输入就是a[j][i];输完之后为了便于比较有多少个玩家派遣的兵力小于目前吃掉的,就要排一个序,因为兵力会比较多,所以答案的第二维就要开大一点,开小了居然是WA,不是RE。

#include<bits/stdc++.h>
using namespace std;
int s,n,m;
int ans[200][20050],lisa[110][110];
int main() {
    scanf("%d%d%d",&s,&n,&m);
    for(int i=1; i<=s; i++)
        for(int j=1; j<=n; j++) {
            scanf("%d",&lisa[j][i]);
        }
    for(int i=1; i<=n; i++)
        sort(lisa[i]+1,lisa[i]+1+s);//排序处理。 
    for(int k=1; k<=n; k++)
        for(int j=m; j>=0; j--) {
            ans[k][j]=max(ans[k][j],ans[k-1][j]);//和上一个比较 
            for(int i=1; i<=s; i++) {
                if(j>lisa[k][i]*2) {
                    ans[k][j]=max(ans[k][j],ans[k-1][j-lisa[k][i]*2-1]+k*i);//严格大于2倍,i*k,k就是前面可以吃掉的玩家。 
                }
            }
        }
    printf("%d",ans[n][m]);
}

【BJOI2019】排兵布阵

标签:--   二维   个人   就是   lis   i++   can   mes   int   

原文地址:https://www.cnblogs.com/Fast-Bird/p/11376875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!