dp(本菜鸡这道题不会用dfs写所以写了个dp)

zhaoliboyang 2022-11-14 22:49:35 2023-01-05 21:17:44 27 返回题目

这道题说白了就一件事:在任意时刻,手握一元钱的同学的钱的数量不得少于手握两元钱的同学的数量。

所以,dp就可以完美解决这个问题(标数法)

详情看代码:

#include <bits/stdc++.h>
using namespace std;
int dp[20][20];
int n;
int main() {
    cin >> n;
    dp[1][1] = 1;
    for (int i = 1; i <= n + 1; i++) {  //加一的原因是因为人数可能为由零个人到n个人,是n+1种可能性
        for (int j = i; j <= n + 1; j++) {  //从i开始是为了防止有两元钱同学超过有一元钱的同学(找不开了)
            if (!(i == 1 && j == 1))
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];  //转移方程:上一个加一个一元的同学和另外一个加一个两元的同学
        }
    }
    cout << dp[n + 1][n + 1] << endl;  //完美收工
    return 0;
}
{{ vote && vote.total.up }}