有n种物品和容量为v的背包,每种物品可无限次使用,放入的费用是ci,价值是wi,求价值最大
#include<stdio.h> #include<algorithm> using namespace std; const int maxn=1e3+6; int n; int c[maxn],w[maxn],dp[maxn]; //dp[i]表示i,体积为i的最大价值 //完全背包就地滚动 int main() { int n,vi; scanf("%d%d",&n,&vi); for(int i=1;i<=n;i++) scanf("%d",&c[i]); for(int i=1;i<=n;i++) scanf("%d",&w[i]); int mmax=0; for(int i=1;i<=n;i++) { for(int j=c[i];j<=vi;j++) { dp[j]=max(dp[j],dp[j-c[i]]+w[i]); mmax=max(dp[j],mmax); } } printf("%d\n",mmax); }