标签:style blog color io os ar strong for sp
DP 一直是心中痛,不多说了,这个暑假就坑在这上了。
这暑假第一道DP题,01背包问题。
题意是说物品有 重量和价值 ,但你能承受的重量有限,问你能带的最大价值。
这题数组开大点,尽管不知道有啥坑点,可是我数组开得大,直接1A了。
想想自己DP都是大问题,还要给学弟讲(tiao)题(jiao),真是忧伤。
仅仅能这几天通宵点出 DP 天赋。顺便贴上自己的理解,反正我也准备这样给学弟讲,假设有误,请路过大神指正。
N = 4 ,M= 6 。
//初始化背包 毕竟没放东西的时候是没有价值的
//还有其它初始化为-INF 的情况,仅仅有dp[0]=0。这是要求:恰好装满的最大价值。
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); } }
标签:style blog color io os ar strong for sp
原文地址:http://www.cnblogs.com/lcchuguo/p/4000754.html