01背包问题。
2012-10-07 22:19
323 查看
pku 3624 Charm Bracelet
http://poj.org/problem?id=3624
最裸的01背包。
View Code
更新中。。。
http://poj.org/problem?id=3624
最裸的01背包。
View Code
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <set> #include <map> #include <string> #define CL(a,num) memset((a),(num),sizeof(a)) #define iabs(x) ((x) > 0 ? (x) : -(x)) #define Min(a , b) ((a) < (b) ? (a) : (b)) #define Max(a , b) ((a) > (b) ? (a) : (b)) #define ll __int64 #define inf 0x7f7f7f7f #define MOD 100000007 #define lc l,m,rt<<1 #define rc m + 1,r,rt<<1|1 #define pi acos(-1.0) #define test puts("<------------------->") #define maxn 100007 #define M 15007 #define N 25 using namespace std; //freopen("din.txt","r",stdin); int dp [M]; int pos ,g ; const int L = 7500; int main(){ //freopen("din.txt","r",stdin); int i,j,k; int n,m; scanf("%d%d",&n,&m); for (i = 1; i <= n; ++i) scanf("%d",&pos[i]); for (i = 1; i <= m; ++i) scanf("%d",&g[i]); CL(dp,0); for (i = 1; i <= n; ++i){ dp[1][g[1]*pos[i] + L]++; } for (i = 2; i <= m; ++i){ for (j = 0; j <= 15000; ++j){ if (dp[i - 1][j]){ for (k = 1; k <= n; ++k){ dp[i][j + pos[k]*g[i]] += dp[i - 1][j]; } } } } printf("%d\n",dp[m][7500]); return 0; }
更新中。。。