posts - 99,  comments - 8,  trackbacks - 0

 

//理解好模板后分步做 
#include <stdio.h>
#include 
<stdlib.h>
 
int main ()
{
    
int num1[9000];              
    
int num2[9000];
    
int number1, number2, number3;
    
    
while ( scanf ("%d%d%d"&number1, &number2, &number3) != EOF && ( number1 != 0 && number2 != 0 && number3 != 0 ) )
    
{
          int max;
          max = 1 * number1 + 2 * number2 + 5 * number3;
          //总体初始化 
          for (int i =0; i <= max; i ++)
          {
              num2[i] = 0;
              num1[i] = 0;            
          }                
          
          //第一个表达式和第二个表达式相乘
          for (int i = 0; i <= number1; i ++) //第一个表达式的所有面值都有一种情况 
          {
              num1[i] = 1;
          }  
          for (int i = 0; i <= number1 * 1; i ++)
          {
              for (int j = 0; j <= number2 * 2; j += 2)
              {
                  num2[i + j] += num1[i];
              }
          } 
          for (int i = 0; i <= number1 * 1 + number2 * 2; i ++)  //扩大面值范围 
          {
              num1[i] = num2[i];
              num2[i] = 0;
          }
          //第二个表达式和第三个表达式相乘
          for (int i = 0; i <= 1 * number1 + 2 * number2; i ++)
          {
              for (int j = 0; j <= 5 * number3; j += 5)
              {
                  num2[i + j] += num1[i];
              }
          } 
          for (int i =0; i <= max; i ++)
          {
              num1[i] = num2[i];
              num2[i] = 0;
          }
          
          int i;
          for ( i = 0; i <= max; i ++)
          {
              if (num1[i] == 0)
              {
                          printf ("%d\n", i);
                          break;
              }
          } 
          
          if(i == max+1)
            printf("%d\n", i);
                  
    }
    
   
// system ("pause");
    return 0;
}
 
posted on 2010-08-22 11:46 雪黛依梦 阅读(627) 评论(2)  编辑 收藏 引用 所属分类: 母函数

FeedBack:
# re: hdu 1085
2011-09-17 09:40 | Dack Sword
弱弱的说一句,你这个代码是有问题,刚刚我试了,WA了,以前OJ的数据太弱了,侥幸通过了额  回复  更多评论
  
# re: hdu 1085
2011-09-17 10:33 | Dack Sword
这个代码是参考了你的代码写的,你的代码在HDOJ 是WA的,下面有点小小的不同,通过n次得测试,发现了,但不知是什么原因。
#include<iostream>
using namespace std;
int main(){
int num_1,num_2,num_5,num,i,j,k;
int c[8005],temp[8005];
while(scanf("%d%d%d",&num_1,&num_2,&num_5)!=EOF&&(num_1||num_2||num_5) ){
num=num_1*1+num_2*2+num_5*5;
for( i=0;i<=num;i++){ //初始化
c[i]=0;
temp[i]=0;
}
//第一个表达式和第二个表达式相乘
for( i=0;i<=num_1;i++) //用第一个表达式表(即面值为1的硬币)表达所有的面值都只有一种情况
c[i]=1;
for( j=0;j<=num_1*1;j++)
for( k=0;k<=num_2*2;k+=2)
temp[j+k]+=c[j];
for( j=0;j<=num_1*1+num_2*2;j++){//扩大面值范围
c[j]=temp[j];
temp[j]=0;
}
//第二个表达式和第三个表达式相乘
for( j=0;j<=num_1*1+num_2*2;j++)
for( k=0;k<=num_5*5;k+=5)
temp[j+k]+=c[j];
for( j=0;j<=num;j++){ //扩充范围
c[j]=temp[j];
temp[j]=0;
}
for( i=0;i<=num;i++) //查找第一个为0的数
if(c[i]==0){
break;
}
printf("%d\n",i); //不知道是什么原因,这个放在if(c[i]==0) 里面是WA的 ,估计是HDOJ的系统问题
}
return 0;
}
  回复  更多评论
  

只有注册用户登录后才能发表评论。
相关文章:
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜