[洛谷P5322][BJOI2019][题解]排兵布阵
0.咕
国庆假期就这么过去了呢
原题
1.解法
发现对于每一个城堡,一个对手被攻陷后所有比他小的都会被攻陷,于是我们先对对手的兵力排序。
此时在这\(s\)个对手里,第\(i\)个对手的攻陷代价为\(2\times a_i+1\),攻陷后获得的价值为\(i\times k\)。
每个城堡\(s\)个对手,选一个攻打,这是啥不用说了吧。
2.代码
#define N 110
#define M 20010
int s,n,m,a[N][N],f[M];
int main(){
Read(s),Read(n),Read(m);
for(rg int i=1;i<=s;i++){
for(rg int j=1;j<=n;j++){
Read(a[j][i]);
}
}
for(rg int i=1;i<=n;i++){
sort(a[i]+1,a[i]+1+s);
for(rg int j=1;j<=s;j++)a[i][j]=a[i][j]*2+1;
}
for(rg int i=1;i<=n;i++){
for(rg int j=m;j>=0;j--){
for(rg int k=1;k<=s;k++){
if(j>=a[i][k]){
f[j]=max(f[j],f[j-a[i][k]]+i*k);
}
}
}
}
cout<<f[m]<<endl;
return 0;
}
3.完结撒花
又水了一篇题解真好
内容来自_ajthreac_的博客(https://www.cnblogs.com/juruoajh/),未经允许,不得转载。