Hodj1171多重背包转换成母函数

来源:互联网 发布:banner.js 韩顺平 编辑:程序博客网 时间:2024/05/16 08:50
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;static const int lmax = 1000000;static int C1[lmax],C2[lmax];static int a[10],e[10];int main(){int n;while(scanf("%d",&n)&&n>=0){int num;int total = 0;for (int i=1;i<=n;++i){scanf("%d %d",&a[i],&e[i]);total += e[i]*a[i];}memset(C1,0,sizeof(C1));memset(C2,0,sizeof(C2));for(int i=0;i<=e[1];++i){C1[i*a[1]] = 1;}for (int i=2;i<=n;++i){//因为A最多选一半for (int j=0;j<=total/2;++j){for (int k=0;k<=e[i]&&(k*a[i]+j)<=total/2;k++){C2[j+k*a[i]]+=C1[j];}}for (int j=0;j<=total/2;++j){C1[j] =C2[j];C2[j] = 0;}}int ans = 0;for (int i=total/2;i>0;i--){if (C1[i]){ans = i;break;}}printf("%d %d\n",total-ans,ans);}return 0;}

0 0
原创粉丝点击