poj3624——charm bracelet
2017-10-31 16:17
344 查看
题目大意:n个手链,第i个手链的重量wi,价值di,一个人能承受重量M的手链,问最大价值是多少
输入:n m(0<=n<=3402)(0<=m<=12880)
wi di(0<=wi<=400,0<=di<=100)
输出:最大价值
分析:典型的动态规划01背包问题
状态dp[i][j]:前i个手链可选,容量为j时的最大价值
结果:dp
[m]
初始化:dp[0][j]=0
状态转移方程:dp[i][j]=max{dp[i-1][j],dp[i-1][j-w[i]]+d[i]}
代码:转载自http://www.cnblogs.com/yueyanglou/p/5353124.html(有改动)
可以用滚动数组节省空间:
输入:n m(0<=n<=3402)(0<=m<=12880)
wi di(0<=wi<=400,0<=di<=100)
输出:最大价值
分析:典型的动态规划01背包问题
状态dp[i][j]:前i个手链可选,容量为j时的最大价值
结果:dp
[m]
初始化:dp[0][j]=0
状态转移方程:dp[i][j]=max{dp[i-1][j],dp[i-1][j-w[i]]+d[i]}
代码:转载自http://www.cnblogs.com/yueyanglou/p/5353124.html(有改动)
#include <cstdio> #include <string> #include <iostream>
#include <algorithm> using namespace std; int dp[3410][12900]; int w[3410]; int d[3410]; int n; int m; int main() { int i,j; scanf("%d",&n); scanf("%d",&m); for(i=1;i<=n;i++) { scanf("%d",&w[i]); scanf("%d",&d[i]); } memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ dp[i][j] = dp[i-1][j]; if(j>=w[i] && dp[i][j]<dp[i-1][j-w[i]]+d[i]){ dp[i][j] =dp[i-1][j-w[i]]+d[i]; } } } printf("背包内物品的最大价值是:\n"); printf("%d\n",dp [m]); return 0; }
可以用滚动数组节省空间:
for(int i=1; i<=n; i++) { for(int j=m; j>=w[i]; j--) { dp[j]=max(dp[j], dp[j-w[i]]+d[i]); } }
相关文章推荐
- POJ 3624 Charm Bracelet
- Charm Bracelet POJ - 3624
- poj 3624 Charm Bracelet DP 01背包
- POJ 3624 A - Charm Bracelet
- poj 3624 Charm Bracelet
- POJ 3624:Charm Bracelet【01背包】
- POJ 3624 Charm Bracelet
- POJ3624 - Charm Bracelet - 动态规划之01背包
- poj 3624 Charm Bracelet DP 0/1 背包问题
- [再做01背包] POJ 3624 Charm Bracelet
- poj 3624 Charm Bracelet
- POJ 3628 Bookshelf2 / POJ 3624 Charm Bracelet / POJ 1384 初涉01背包与完全背包
- POJ 3624 Charm Bracelet
- POJ-3624 Charm Bracelet
- POJ - 3624 - Charm Bracelet
- poj 3624 Charm Bracelet
- poj3624——Charm Bracelet
- poj——3624——Charm Bracelet
- POJ 3624 Charm Bracelet
- POJ 3624 Charm Bracelet