HDOJ HDU 2069 Coin Change ACM 2069 IN HDU ..WA 真的成为习惯了...................

//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址 :
            http://acm.hdu.edu.cn/showproblem.php?pid=2069

目前每日平均WA次数 20次以上...................................
晚上做一道水题 HDOJ 2069 ACM IN HDU, 又跟上次的 TLE 的 -1 一样, 题目的最后一段是文件结束的说明,
都没怎么自习去看, 结果直接就WA了.............最后在 元帅的提醒下, 原来这题真的很水,就跟刚学编程时做的
100钱买小鸡,公鸡,母鸡 100只一样, 是可以直接暴力的, 因为数据不大.  当然,也可以用 母函数来做, 不过需要
增开辅助空间 : 
                 c1[i][j]  表示i分钱由j个硬币组成的方案数 , 然后在循环中增加一个循环 :用于保存在当前硬币数量k上增加
                  1 - n 个硬币时 ( k + n < =100  )   方案数

暴力代码: 
//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

 1
  #include  < iostream >
 2  int  main()
 3  {
 4       int  n, d[ 251 =  {  0  };
 5       int  c1, c5, c10, c25, c50;
 6       for  ( n  =   0 ; n  !=   251 ; n  ++  )
 7      {
 8            for  ( c50  =   0 ; c50  *   50   <=  n; c50  ++  )
 9           {
10                  for  ( c25  =   0 ; c50  *   50   +  c25  *   25   <=  n; c25 ++  )
11                 {
12                       for  ( c10  =   0 ; c50  *   50   +  c25  *   25   +  c10  *   10   <=  n; c10 ++  )
13                      {
14                            for  ( c5  =   0 ; c50  *   50   +  c25  *   25   +  c10  *   10   +  c5  *   5   <=  n; c5 ++  )
15                           {
16                                c1  =  n  -  ( c50  *   50   +  c25  *   25   +  c10  *   10   +  c5  *   5  );
17                                 if  ( c1  +  c5  +  c10  +  c25  +  c50  <=   100  ) 
18                                {
19                                     d[n] ++ ;
20                                }
21                           }
22                      }
23                 }
24           }
25      }
26       while  (  ~ scanf( " %d " & n) )
27      {
28           printf (  " %d\n " , d[n] );
29      }
30       return   0 ;
31  }
32 

母函数代码 :
 1 #include <iostream>
 2 using namespace std;
 3 int c1[251][101];
 4 int c2[251][101];
 5 int mon[6] = { 0, 1, 5, 10, 25, 50 };
 6 int sum[251];
 7 int main ()
 8 {
 9            c1[0][0] = 1;
10            for ( int i = 1; i <= 5; ++ i )
11            {
12                  for ( int j = 0; j <= 250; ++ j ) 
13                  {
14                        for ( int k = 0; k * mon[i] + j <= 250; ++ k )
15                        {
16                              for ( int p = 0; p + k <= 100; ++ p )
17                              {
18                                    c2[ j + k * mon[i] ][p + k] += c1[j][p];
19                              } 
20                        } 
21                  }
22                  for ( int j = 0; j != 251; ++ j )
23                  {
24                       for ( int k = 0; k != 101; ++ k )
25                       {
26                             c1[j][k] = c2[j][k]; 
27                             c2[j][k] = 0;
28                       }
29                  }
30            }
31            for ( int j = 0; j != 251; ++ j )
32            {
33                 for ( int i = 0; i != 101; ++ i )
34                 {
35                       sum[j] += c1[j][i] ;
36                 }
37            }
38            int N;
39            while ( cin >> N )
40            {
41                   
42                   cout << sum[N] << endl;
43            }
44            return 0; 
45 } 
46 

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802395.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值