0.咕
国庆假期就这么过去了呢
原题
1.解法
发现对于每一个城堡,一个对手被攻陷后所有比他小的都会被攻陷,于是我们先对对手的兵力排序。
此时在这(s)个对手里,第(i)个对手的攻陷代价为(2 imes a_i+1),攻陷后获得的价值为(i imes 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.完结撒花
又水了一篇题解真好