题目描述:
Scout 在开局 7 分钟就买了一本梅贾的窃魂卷,俗称“杀人书”,杀人书(一共 25 层 被动)的功效是击杀一名敌方英雄就增加 5 层被动,获得一次助攻会增加 2 层被动, 而被击杀一次会掉 10 层被动,掉到 0 层不会再掉,scout 杀人书初始为 0 层。现在 已知在游戏结束时 scout 的杀人书为 25 层,给出 scout 的击杀数 k,死亡数 d,以 及助攻数 a,请问这三种字母共有多少种出现顺序能让 scout 最后的杀人书为 25 层, 超过 25 层也为 25 层。
输入
输入三个整数 k(0
样例输入: 3 1 5
样例输出: 56
提示样例中 dkkkaaaaa 和 dkakakaaa 为不同的两种
题目分类: 动态规划
代码如下:
#includeusing namespace std; int dp[15][10][10][30]; int main() { int k, d, a; int ans = 0; cin >> k >> d >> a; dp[0][0][0][0] = 1; for (int i = 0; i <= k; i++)//击杀数 { for (int j = 0; j <= d; j++)//死亡数 { for (int k = 0; k <= a; k++)//辅助数 { for (int v = 0; v <= 25; v++)//层数 { //记录到当前状态共有多少种组合的方式 dp[i + 1][j][k][min(25, v + 5)] += dp[i][j][k][v];//若击杀数增加1,则层数加5,超过25层按25层记 dp[i][j + 1][k][max(0, v - 10)] += dp[i][j][k][v];//若死亡数增加1,则层数减5,小于0层按0层记 dp[i][j][k + 1][min(25, v + 2)] += dp[i][j][k][v];//若辅助数增加1,层数加2 } } } } //当k,d,a次数用完且层数等于25,记录答案 for (int i = 25; i <= 25; i++) ans += dp[k][d][a][i]; cout << ans; return 0; }
思路来源:https://www.cnblogs.com/1436177712qqcom/p/15677755.html



