BJOI2019排兵布阵
Posted fast-bird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BJOI2019排兵布阵相关的知识,希望对你有一定的参考价值。
二维背包,不是很难。
看第二个样例时想到,既然吃掉了每一个城堡的某一个人的分,那么所有比那个人派遣兵力小的都可以吃掉,所以就想到了用一维存城堡,二维存第几个玩家的兵力。
所以输入就是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排兵布阵的主要内容,如果未能解决你的问题,请参考以下文章