poj 3628 Bookshelf 2( 0-1背包。)

搜的01背包题。

 

这个相当于体积和价值一样大的01背包。

 

我做的可能麻烦了点。貌似有搜索过的。还有其他的状态方程的。我DP做的少。。。只会这个状态方程了。。。YM。

 

将所有背包容量情况#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <algorithm> #include <limits.h> using namespace std; int w[1000002],bag[20000005]; int main(void) { int n,c; while( scanf("%d %d",&n,&c)!=EOF ) { int sum = 0; for(int i=1; i<=n; i++) { scanf("%d",&w[i]); sum += w[i]; } for(int i=1; i<=c; i++) bag[i] = 0; for(int i=1; i<=n; i++) for(int k=sum; k>=w[i]; k--) { if( bag[k] < bag[k-w[i]] + w[i] ) bag[k] = bag[k-w[i]] + w[i]; } int min = INT_MAX; for(int i=c; i<=sum; i++) { if( bag[i] >= c && bag[i] - c < min ) min = bag[i] - c; } cout << min << endl; } return 0; } 存起来,找与书架值差值最小的。差值可以等于0。

 

 

 

你可能感兴趣的:(c)