小A点菜 水题 dp 背包

Posted Nevermore

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小A点菜 水题 dp 背包相关的知识,希望对你有一定的参考价值。

基本上还是01背包,首先注意必须正好花光钱,所以初始化时除了dp[0]以外其他都要设置成inf,然后因为求方案数,所以基本方程为dp[i] = dp[i-x] + dp[i],再根据inf进行一些特殊处理即得解

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 
 5 const int maxm = 10000 + 500;
 6 const int inf = 0x7fffffff >> 1;
 7 int dp[maxm];
 8 int n, m;
 9 int x;
10 
11 int main () {
12     scanf("%d %d", &n, &m);
13     for (int i = 1; i <= m; i++) dp[i] = inf;
14     dp[0] = 1;
15     for (int i = 1; i <= n; i++) {
16         scanf("%d", &x);
17         for (int j = m; j >= x; j--) {
18             if (dp[j - x] == inf) continue;
19             if (dp[j] == inf) dp[j] = dp[j-x];
20             else dp[j] += dp[j-x];
21         }
22     }
23     if (dp[m] == inf) printf("0");
24     else printf("%d", dp[m]);
25     return 0;
26 }

 

以上是关于小A点菜 水题 dp 背包的主要内容,如果未能解决你的问题,请参考以下文章

复习1背包dp

洛谷P1164 小A点菜(01背包求方案数)

P1164小A点菜

采药 水题 dp 01背包问题 luogu1048

小A点菜(luogu 1164)简单DP

洛谷 p1164 小A点菜 dp(好题) || DFS