POJ 3624
背包问题,在定容量的背包中放入物体求装满价值最大。
因为每种物体数量只有1,故只有放与不放。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define N 3410 #define M 13000 int dp[M]; int main() { int n,m; int val[M],w[N]; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { scanf("%d%d",&w[i],&val[i]); } for(int i=1;i<=n;i++) { for(int j=m;j>=w[i];j--) { dp[j]=max(dp[j-w[i]]+val[i],dp[j]); } } printf("%d\n",dp[m]); } return 0; }