uva 147 Dollars

来源:互联网 发布:一口气英语软件下载 编辑:程序博客网 时间:2024/04/30 16:14

Dp[i][j] 表示前 i 种硬币构成面值 j 的方案数,

那么 Dp[i][j] = dp[ i - 1 ][ j ] + Dp[ i ][ j - a[ i ] ]

其中a[ i ]指第i种面值

然后用滚动数组

 

 

 

#include <cstdio>#include <cstdlib>using namespace std;int a[] = {1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000}; long long dp[6001]; int main(){     dp[0] = 1;     for (int i = 0; i < 11; i++)           for (int j = a[i]; j < 6001; j++)              dp[j] += dp[j - a[i]];      double t;     while (scanf("%lf", &t) == 1 && t != 0.00)     {            int n = (int)(t * 20 + 0.1f);            printf("%6.2f%17lld\n", t, dp[n]);     }     return 0;} 


 

原创粉丝点击