设为首页 加入收藏

TOP

hdu 1085
2014-11-23 20:00:48 来源: 作者: 【 】 浏览:11
Tags:hdu 1085

题目大意:分别输入面额为1、2、5的硬币的数量。输出这些硬币不能组成的最小金额


解题思路:本题与1028的一个很大的区别就在于他的硬币的个数是固定。

硬币面额1,2,5且有数量限制num1,num2,num3,问最小不能组合的数量是多少。

G(x)=(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,,+x^5num3),展开,系数不为0的数都是可以由硬币组合出来的。


代码如下:

 * 1085_5.cpp 
 * 
 *  Created on: 2013年8月9日 
 *      Author: Administrator 
 */    章泽天是我的女神!!!女神!!!  
  
  
#include    
#include    
int maxval = 1*1000 + 2*1000 + 5*1000;  
  
int main(){  
    int n1,n2,n3;  
    bool f;  
  
    while(scanf("%d%d%d",&n1,&n2,&n3),n1||n2||n3){  
        int c1[maxval + 5],c2[maxval + 5],c3[maxval + 5];  
        int i,j,k;  
        memset(c1,0,sizeof(c1));  
        memset(c2,0,sizeof(c2));  
        memset(c3,0,sizeof(c3));  
  
        for(i = 0 ; i <= n1 ; ++i ){  
            c1[i] = 1;  
        }  
  
        for(j = 0 ; j <= n1 ; ++j){  
            for(k = 0 ; k <= 2*n2 ; k +=2){  
                c2[j+k] += c1[j];  
            }  
        }  
  
        for( j = 0 ; j <= n1 + 2*n2 ; ++j){  
            for( k = 0 ; k <= 5* n3 ; k+=5){  
                c3[j+k] += c2[j];  
            }  
        }  
  
        f = false;  
  
        for( j = 0 ; j <= n1 + 2*n2 + 5*n3 ; ++j){  
            if(c3[j] == 0){  
                printf("%d\n",j);  
                f = true;  
                break;  
            }  
        }  
  
        if(!f){  
            printf("%d\n",n1 + 2*n2 + 5*n3+1);  
        }  
  
    }  
}  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 1184 下一篇c++文件打包工具实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)