题目描述】
给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。
【输入】
第一行为n和m。
【输出】
一行,方案数。
【输入样例】
3 10 //3种面值组成面值为10的方案 1 //面值1 2 //面值2 5 //面值5
【输出样例】
10 //有10种方案
一维写法:
#include<stdio.h> int main() { long long m, n; long h[10005]; long dp[10005]; scanf("%lld%lld", &m, &n); for (int i = 1; i <= m; i++) { scanf("%lld", &h[i]); } dp[0] = 1; for (int i = 1; i <= m; i++) { for (int j = h[i]; j <= n; j++) { dp[j] += dp[j - h[i]]; } } printf("%lld", dp[n]); return 0; }
二维写法:
#include<stdio.h> #define M 10001 long long a[M]; long long dp[M][M]; int main() { int n, m; scanf("%d%d", &n, &m); int i, j; for (i = 1; i <= n; i++) { scanf("%lld", &a[i]); } dp[0][0] = 1; for (i = 1; i <= n; i++) { for (j = 0; j <= m; j++) { if (a[i] > j) { dp[i][j] = dp[i - 1][j]; } else { dp[i][j] = dp[i - 1][j] + dp[i][j - a[i]]; } } } printf("%lld", dp[n][m]); return 0; }
一本通 1273:货币系统
于 2022-01-26 13:38:16 首次发布