标签:优化方法 总结 ++ 定义 nbsp 情况 scanf 整数 namespace
1 #include<cstdio> 2 using namespace std; 3 const int maxm = 201, maxn = 31; 4 int m, n; 5 int w[maxn], c[maxn]; 6 int f[maxn][maxm]; 7 8 int max(int x,int y) { x>y?x:y;} //求x和y最大值 9 10 int main(){ 11 scanf("%d%d",&m, &n); //背包容量m和物品数量n 12 for (int i = 1; i <= n; i++) //在初始化循环变量部分,定义一个变量并初始化 13 scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值 14 for (int i = 1; i <= n; i++) // f[i][v]表示前i件物品,总重量不超过v的最优价值 15 for (int v = m; v > 0; v--) 16 if (w[i] <= v) f[i][v] = max(f[i-1][v],f[i-1][v-w[i]]+c[i]); 17 else f[i][v] = f[i-1][v]; 18 printf("%d",f[n][m]); // f[n][m]为最优解 19 return 0; 20 }
1 #include<cstdio> 2 using namespace std; 3 4 const int maxm = 2001, maxn = 31; 5 int m, n; 6 int w[maxn], c[maxn]; 7 int f[maxm]; 8 int main(){ 9 scanf("%d%d",&m, &n); //背包容量m和物品数量n 10 for (int i=1; i <= n; i++) 11 scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值 12 13 for (int i=1; i <= n; i++) //设f(v)表示重量不超过v公斤的最大价值 14 for (int v = m; v >= w[i]; v--) 15 if (f[v-w[i]]+c[i]>f[v]) 16 f[v] = f[v-w[i]]+c[i]; 17 printf("%d",f[m]); // f(m)为最优解 18 return 0; 19 }
标签:优化方法 总结 ++ 定义 nbsp 情况 scanf 整数 namespace
原文地址:https://www.cnblogs.com/ljy-endl/p/11260335.html