dfs水题,1Y. 就是看兑换成给定的值有多少种兑换方法... #include<stdio.h> #include<stdlib.h> #include<string.h> int n,m; int value[11],num[11]; int sum,count; void dfs(int x) { int i; if( sum == n ) { count ++; return ; } if( sum > n || x > m) return; dfs(x+1); for( i = 1; i <= num[x]; i++ ){ sum += value[x]; dfs(x+1); } for( i = 1; i <= num[x]; i++ ) sum -= value[x]; } int main(void) { int i,s=0; while( scanf("%d%d",&n,&m) != EOF ) { for( i = 1; i <= m; i++ ) scanf("%d%d",&value[i],&num[i]); sum = count = 0; dfs(1); printf(s++?"/n%d/n":"%d/n",count); } return 0; }