文章资讯类网站,互联网服务平台怎么注册,怎么把网站放到服务器上,关于建设网站的申请正题
题目链接:https://www.luogu.com.cnp/problem/P1768 题目大意 nnn个城池#xff0c;有sss个玩家对于每个城池有一定的兵。对于所有玩家的每个城池都有派兵一个人数#xff0c;要求派兵人数之和为mmm。如果你的派兵数列每大于一个玩家派兵数量的两倍那么就可以获得该城池…正题
题目链接:https://www.luogu.com.cnp/problem/P1768 题目大意
nnn个城池有sss个玩家对于每个城池有一定的兵。对于所有玩家的每个城池都有派兵一个人数要求派兵人数之和为mmm。如果你的派兵数列每大于一个玩家派兵数量的两倍那么就可以获得该城池编号的价值。 解题思路
其实我们可以把每个城池分成sss个物品然后分组背包即可。
时间复杂度O(snm)O(snm)O(snm) codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N110;
ll s,n,m,a[N][N],f[N][2*N*N];
int main()
{scanf(%lld%lld%lld,s,n,m);for(ll i1;is;i){for(ll j1;jn;j)scanf(%lld,a[j][i]),a[j][i]a[j][i]*21;}for(ll i1;in;i)sort(a[i]1,a[i]1s);for(ll i1;in;i){for(ll j0;jm;j)f[i][j]f[i-1][j];for(ll j1;jsa[i][j]m;j){for(ll ka[i][j];km;k)f[i][k]max(f[i-1][k-a[i][j]]j*i,f[i][k]);}}printf(%lld,f[n][m]);
}