DP 一直是心中痛,不多说了,这个暑假就坑在这上了。
这暑假第一道DP题,01背包问题。
题意是说物品有 重量和价值 ,但你能承受的重量有限,问你能带的最大价值。
这题数组开大点,虽然不知道有啥坑点,但是我数组开得大,直接1A了。
想想自己DP都是大问题,还要给学弟讲(tiao)题(jiao),真是忧伤。
只能这几天通宵点出 DP 天赋。顺便贴上自己的理解,反正我也准备这样给学弟讲,如果有误,请路过大神指正。
N = 4 ,M= 6 。
M:W 0 1 2 3 4 5 6
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
using namespace std;
int dp[1000001];
int c[100001],v[100001];
int n,m;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d%d",&c[i],&v[i]);
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
{
for(int j=m;j-c[i]>=0;j--)
{
dp[j]=max(dp[j],dp[j-c[i]]+v[i]);
}
}
int ans=0;
for(int i=0;i<=m;i++)
ans=max(ans,dp[i]);
printf("%d\n",ans);
}
}
POJ 3624 Charm Bracelet,布布扣,bubuko.com
原文地址:http://blog.csdn.net/dongshimou/article/details/37557921