2025/12/27 11:44:49
网站建设
项目流程
长沙手机网站建设哪些,虚拟主机怎么设计网站吗,crm厂商,网站平台网站怎么做题目背景直达通天路小 A 历险记第二篇题目描述自 01 背包问世之后#xff0c;小 A 对此深感兴趣。一天#xff0c;小 A 去远游#xff0c;却发现他的背包不同于 01 背包#xff0c;他的物品大致可分为 k 组#xff0c;每组中的物品相互冲突#xff0c;现在#xff0c;他…题目背景直达通天路·小 A 历险记第二篇题目描述自 01 背包问世之后小 A 对此深感兴趣。一天小 A 去远游却发现他的背包不同于 01 背包他的物品大致可分为 k 组每组中的物品相互冲突现在他想知道最大的利用价值是多少。输入格式两个数 m,n表示一共有 n 件物品背包能承受的最大重量为 m。接下来 n 行每行 3 个数 ai,bi,ci表示物品的重量利用价值所属组数。输出格式一个数最大的利用价值。输入输出样例输入 #1复制运行45 3 10 10 1 10 5 1 50 400 2输出 #1复制运行10说明/提示0≤m≤10001≤n≤10001≤k≤100ai,bi,ci 在int范围内。/* //二维数组写法 #include iostream #include vector using namespace std; vectorvectorint w(101);//第i组第j件物品的重量 vectorvectorint v(101);//第i组第j件物品的利用价值 int dp[101][1001];//面对第i组物品 背包容量为j时的最大价值 int main(){ int m,n;//背包容量 物品件数 cinmn; for(int i1;in;i){ int a,b,c; cinabc; w[c].push_back(a); v[c].push_back(b); } for(int l1;l100;l){//遍历所有组 for(int i1;im;i){//遍历背包容量 dp[l][i]dp[l-1][i];//默认不选第l组物品 for(int j0;jw[l].size();j){//遍历一组内所有物品 //可以选的时候比较选还时不选 if(iw[l][j]) dp[l][i]max(dp[l][i],dp[l-1][i-w[l][j]]v[l][j]); } } } coutdp[100][m]; return 0; } */ //一维数组写法 #include iostream #include vector using namespace std; vectorvectorint w(101);//第i组第j件物品的重量 vectorvectorint v(101);//第i组第j件物品的利用价值 int dp[1001];//背包容量为j时的最大价值 int main(){ int m,n;//背包容量 物品件数 cinmn; for(int i1;in;i){ int a,b,c; cinabc; w[c].push_back(a); v[c].push_back(b); } for(int l1;l100;l){//遍历所有组 for(int im;i0;i--){//遍历背包容量 要逆序 因为每个物品只能选择一次 for(int j0;jw[l].size();j){//遍历一组内所有物品 //可以选的时候比较选还时不选 if(iw[l][j]) dp[i]max(dp[i],dp[i-w[l][j]]v[l][j]); } } } coutdp[m]; return 0; }