朱色虫居
Pages
Home
Featured Posts
2006/10/01
357-Let Me Count The Ways
/*
"Let Me Count The Ways"
Level:5.5
Date:2006/9/30
技巧:Dynamic programming
先計算只有1 cent的組合
再加入5 cent的組合
再加入10 cent的組合
比如17,在1 cent的組合只有一種.
將5 cent加入考慮後,17=5+12 (12=5+7) (7=5+2)
原本大家都只有1種,但5cent加入後,7變1+1種 ,12變1+2種 ,17變1+3種
所以7有2種,12有3種,17有4種.(有propagate的效應)
當10 cent加入考慮後,17=10+5
原本10只有1+2種 ,但10加入後變1+2+1種
17變4+2種(因為5cent加入後,5變兩種)
而25或50的加入都只影響大於25或50 的數字,
所以17共6種.
*/
#include
#define N 5
#define M 30002
main(){
int coin[N]={1,5,10,25,50};
long long int table[M]={0};
int cent=0,
i=0,j=0;
table[0]=1;
for(i=0;i < N;i++){ for(j=coin[i];j < M;j++) table[j]+=table[j-coin[i]]; } while(scanf("%d",¢)==1){ if(table[cent] == 1) printf("There is only 1 way to produce %d cents change.\n",cent); else /*上傳ACM %I64d 要改成 %lld*/ printf("There are %I64d ways to produce %d cents change.\n" ,table[cent],cent); } }
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment