poj 1276dp 다중 가방

2015/2/12
심플한 다중 가방
단지 데이터가 그다지 좋지 않아서, 10배낭으로 물을 길어올 수 없다
나는 가방을 뜯는 것을 쓴다.
이렇게.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
typedef long long ll;  

#define mod 10007
#define lson pos<<1,l,mid
#define sc(n) scanf("%d",&n)
#define rson pos<<1|1,mid+1,r
#define pr(n) printf("%d
",n) #define met(n,m) memset(n, m, sizeof(n)) #define F(x,y,i) for(int i = x;i > y; i--) #define f(x,y,i) for(int i = x;i < y; i++) #define ff(x,y,i) for(int i = x;i <= y; i++) #define FF(x,y,i) for(int i = x;i >= y; i--) const int N=100500; const int inf = INT_MAX; int Max(int a,int b) { return a>b?a:b; } int Min(int a,int b) { return a= sum) { f(v[i],sum+1,j) { dp[j] = Max(dp[j],dp[j - v[i]] + v[i]); } } else { int k ,num; num = c[i]; k = 1; while(k <= num) { for(int j = sum;j >= k*v[i]; j--) { dp[j]=Max(dp[j],dp[j-k*v[i]]+k*v[i]); } num-=k; k<<=1; } for(int j = sum;j >= num*v[i]; j--) { dp[j]=Max(dp[j],dp[j-num*v[i]] +num*v[i]); } } } pr(dp[sum]); } return 0; }

좋은 웹페이지 즐겨찾기