http://acm.hdu.edu.cn/showproblem.php?pid=2069
原来学百钱买百鸡是写的代码超时。看到一个大牛的也是用的暴力不过比我原来的写法要好很多!一下ac 了!
也有用母函数过的,不过我对母函数理解还不深,看不太懂!
用的是二维的数组,写的母函数。
牛人这样提示:
- int c1[250][100], c2[250][100];
- 状态转移为:
- int x = l + j/step[i];
- c1[j+k][x] += c2[k][l];
下面是暴力代码:
Problem : 2069 ( Coin Change ) Judge Status : Accepted
RunId : 3065001 Language : G++ Author : rll
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
RunId : 3065001 Language : G++ Author : rll
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
#include
<
stdio.h
>
2 #include < string .h >
3
4 int main()
5 {
6 int n,i,j,k,m,cent,a[ 6 ] = { 1 , 5 , 10 , 25 , 50 },c[ 252 ];
7 memset(c, 0 , sizeof (c));
8 for (i = 0 ;i < 101 && a[ 0 ] < 251 ;i ++ )
9 for (j = 0 ;i + j < 101 && a[ 0 ] * i + a[ 1 ] * j < 251 ;j ++ )
10 for (k = 0 ;i + j + k < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k < 251 ;k ++ )
11 for (m = 0 ;i + j + k + m < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m < 251 ;m ++ )
12 for (n = 0 ;i + j + k + m + n < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m + a[ 4 ] * n < 251 ;n ++ )
13 c[a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m + a[ 4 ] * n] += 1 ;
14
15 while (scanf( " %d " ,¢) != EOF)
16 {
17 printf( " %d\n " ,c[cent]);
18
19 }
20 return 0 ;
21 }
2 #include < string .h >
3
4 int main()
5 {
6 int n,i,j,k,m,cent,a[ 6 ] = { 1 , 5 , 10 , 25 , 50 },c[ 252 ];
7 memset(c, 0 , sizeof (c));
8 for (i = 0 ;i < 101 && a[ 0 ] < 251 ;i ++ )
9 for (j = 0 ;i + j < 101 && a[ 0 ] * i + a[ 1 ] * j < 251 ;j ++ )
10 for (k = 0 ;i + j + k < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k < 251 ;k ++ )
11 for (m = 0 ;i + j + k + m < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m < 251 ;m ++ )
12 for (n = 0 ;i + j + k + m + n < 101 && a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m + a[ 4 ] * n < 251 ;n ++ )
13 c[a[ 0 ] * i + a[ 1 ] * j + a[ 2 ] * k + a[ 3 ] * m + a[ 4 ] * n] += 1 ;
14
15 while (scanf( " %d " ,¢) != EOF)
16 {
17 printf( " %d\n " ,c[cent]);
18
19 }
20 return 0 ;
21 }