栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

梅贾的窃魂卷(吉首大学新星杯 C题)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

梅贾的窃魂卷(吉首大学新星杯 C题)

梅贾的窃魂卷

题目描述:
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 为不同的两种

题目分类: 动态规划
代码如下:

#include
using 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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号