首页 > 其他 > 详细

HDU 2844 Coins

时间:2014-01-23 18:26:40      阅读:356      评论:0      收藏:0      [点我收藏+]

题解:背包问题方案总数,用二进制优化。

bubuko.com,布布扣
#include <cstdio>
#include <iostream>
using namespace std;  
int f[100005];  
int a[105],c[105];  
int main()  
{  
    int i,j,k,n,m,cnt;  
    while(scanf("%d%d",&n,&m)!=EOF)  
    {  
        if(n==0&&m==0) break;  
        for(i=0;i<n;i++)  
          scanf("%d",&a[i]);  
        for(i=0;i<n;i++)  
          scanf("%d",&c[i]);  
        memset(f,0,sizeof(f));  
        f[0]=1;  
        for(i=0;i<n;i++)  
        {  
          cnt=c[i];  
          for(k=1;k<=cnt;k<<=1)  
          {  
            for(j=m;j>=k*a[i];j--)  
               f[j]+=f[j-k*a[i]];  
            cnt-=k;  
          }  
          if(cnt)  
          for(j=m;j>=cnt*a[i];j--) f[j]+=f[j-cnt*a[i]];  
        }  
        int sum=0;  
        for(i=1;i<=m;i++)  
          if(f[i]) sum++;  
        printf("%d\n",sum);  
    }  
    return 0;  
}  
bubuko.com,布布扣

HDU 2844 Coins

原文:http://www.cnblogs.com/forever97/p/3530766.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!