poj 1837分组背包

来源:互联网 发布:linux挂载盘到home好吗 编辑:程序博客网 时间:2024/05/20 04:31

参考了别人的思路  点击打开链接


N种距离钩子,m个重量,每个重量放不同的钩子就是一个分组

分组背包:

#include<iostream>  #include <string>   #include<vector>  #include<algorithm>  #include<set>  #include<fstream>#include<cmath>  using namespace std;  #define lch(i) ((i)<<1)  #define rch(i) ((i)<<1|1)  #define sqr(i) ((i)*(i))  #define pii pair<int,int>  #define mp make_pair  #define FOR(i,b,e) for(int i=b;i<=e;i++)  #define ms(a)   memset(a,0,sizeof(a))  const int maxnum =25;int n,m;int w[maxnum],h[maxnum];int dp[maxnum][15005];int main()  {  scanf("%d%d",&n,&m);FOR(i,1,n){scanf("%d",&h[i]);}FOR(i,1,m){scanf("%d",&w[i]);}dp[0][7500]=1;FOR(i,1,m){FOR(j,0,15000){FOR(k,1,n){int last = j-w[i]*h[k];if(last>=0&&last<=15000&&dp[i-1][last])dp[i][j]+=dp[i-1][last];}}}printf("%d\n",dp[m][7500]);return 0;}


0 0
原创粉丝点击