Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877441
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-05-02 12:15:37

题意是给你一定数目的1,2,5分的硬币, 告诉你各自的数量 ,让你找出不能被这些硬币表示的最小价值。

万变不离其中。

题目给出了3种类型,每种既不是1个,又不是无限个。怎么办?
给定硬币的值,输入数量

hdu 1085 Holding Bin-Laden Captive!
Output
Output the minimum positive value that one cannot pay with given coins, one line for one case.
 
Sample Input
1 1 3(这是每种的数目)
0 0 0
Sample Output
4

当c1[n],就是xn前的系数,如果c1[n]==0,即是果项不存在,则没有可行的方案
一开始最后的循环,忘记左判断一种情况,所以没有输出又直接循环到while
一直提示输入。。。

点击(此处)折叠或打开

  1. #include<stdio.h>


  2. int c1[10000],c2[10000];

  3. int main()
  4. {
  5.     int num_1,num_2,num_5;
  6.     while(scanf("%d%d%d",&num_1,&num_2,&num_5) && (num_1||num_2||num_5))
  7.     {
  8.         
  9.             int i,j,k;
  10.             int _max=num_1+num_2*2+num_5*5;//可能出现的最大指数
  11.             for(i=0;i<=_max;i++)//最个数组初始化先
  12.             {
  13.                 c1[i]=0;
  14.                 c2[i]=0;
  15.             }

  16.             //第一个括号
  17.             for(i=0;i<=num_1;i++)//
  18.             {
  19.                 c1[i]=1;
  20.             
  21.             }
  22.             //第二个括号
  23.             for(j=0;j<=num_1;j++)
  24.             {
  25.                 for(k=0;k<=num_2*2;k+=2)//k的变化,最大值:num_2*2要根据每一个括号的数列来表示
  26.                 {                        //这里K可以超出,因为最大值为_max要根据每一个括号的数列来表示
  27.                     c2[k+j]+=c1[j];
  28.                 }
  29.             }    
  30.             
  31.             //保存一下
  32.             for(j=0;j<=num_1+num_2*2;j++)//两个多项式相乘那个指数最大值num_1+num_2*2
  33.             {
  34.                 c1[j]=c2[j];
  35.                 c2[j]=0;
  36.             }
  37.                 //第三个括号
  38.             for(j=0;j<=num_1+num_2*2;j++)
  39.             {
  40.                 for(k=0;k<=num_5*5;k+=5)//k的变化,这里K可以超出要根据每一个括号的数列来表示
  41.                 {                    
  42.                     c2[k+j]+=c1[j];
  43.                 }
  44.             }    
  45.             for(j=0;j<=_max;j++)
  46.             {
  47.                 c1[j]=c2[j];
  48.                 c2[j]=0;
  49.             }

  50.         
  51.             for(i=0;i<=_max;i++)
  52.             {
  53.                 if(c1[i]==0)//第0项,不影响的,而且执行一次后不会为0
  54.                 {
  55.                     printf("%d\n",i);
  56.                     break;
  57.                 }    
  58.             }
  59.                 if(i==(_max+1))
  60.                 {
  61.                     printf("%d\n",i);
  62.                     
  63.                 }

  64.     }
  65.     return 0;
  66. }



阅读(901) | 评论(0) | 转发(0) |
0

上一篇:hdu1398Square Coins

下一篇:acm中的打表

给主人留下些什么吧!~~