A128411题解
2026-08-14 19:20:44
发布于:浙江
75阅读
0回复
0点赞
背景:
原题链接
建议降橙(洛谷完全背包标的是橙)
CCF没题出了吗,一道板子题,而且和A61990一模一样,就换了个情境。
思路:
完全背包板子题,套板子就行了。
和为编号为的物品重量和价值,为总重量为时的价值最大值。
完全背包重量遍历为从小到大保证物品可选多次
本题一共人,也就是背包大小为,重量就是输入时的下标。
代码:
#include <iostream>
using namespace std;
int w[1010],v[1010];//w数组为重量,v数组为价值
int dp[1010];//dp数组大小为重量最大值
int main(){
int n,W;
cin>>n;
W=n;
for (int i=1;i<=n;i++){
w[i]=i;//重量就是下标i
cin>>v[i];
}
for (int i=1;i<=n;i++){
for (int j=w[i];j<=W;j++){
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}//完全背包模板
cout<<dp[W];
return 0;
}
根据题意简化后(不加注释了吧):
#include <iostream>
using namespace std;
int p[1010];
int dp[1010];
int main(){
int n;
cin>>n;
for (int i=1;i<=n;i++){
cin>>p[i];
}
for (int i=1;i<=n;i++){
for (int j=i;j<=n;j++){
dp[j]=max(dp[j],dp[j-i]+p[i]);
}
}
cout<<dp[n];
return 0;
}
结语:
希望对大家学习OI有帮助!
这里空空如也








有帮助,赞一个