码迷,mamicode.com
首页 > 其他好文 > 详细

皇家棋神

时间:2018-06-03 19:36:32      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:chess   水平   输出   scan   clu   code   包含   题目   AC   

【题目描述】

有 qq 宠物的同学想必都不会陌生,qq 宠物里有一个游戏,叫做皇家战棋。 ZQH是个骨灰级的玩家,他已经赢了很多盘,等级也升的很高。但是慢慢的,大家的水平都挺 高了,都已具备了一定的战术经验,ZQH也占不到丝毫便宜,大多数时候只能靠运气取胜,此 时皇家战棋也变得索然无味。于是ZQH开始思考另外一个有趣的问题,若是每个战棋能自我成 长,又能训练新兵,那一定很有意思。 将来的某一天,在一个神奇的城市,诞生了一名划时代的领袖(当然他也是从士兵做起), 每过一个时刻,任何一个作战单位的战斗力就会提升一分,而每个作战单位在提升力量的同 时,又会培养一名新兵作为下属,每个作战单位所能拥有的下属数量上限为 k。 ZQH很想知道, 在给定下属上限数量 k 的情况下,第 n 个时刻该城邦所具有的总战斗力。 在 k=2,n=5 时情况如下:

技术分享图片

在第 5 个时刻,城邦的领袖,已经蜕变为将军,而整个军队的战斗力也从第 1 个时刻 的1,变为26。而随着军队战斗力与部队数量的增加,城邦已经有足够的力量抵御外敌,城邦 的战斗力在到达或者超过 1234567890 之后,每个战斗单位的战斗力将不再增加,也不再训 练新兵。 ZQH想要知道,在第 n 时刻,每个单位最大下属数量为 k 时,城邦的战斗力。

【输入格式】

输入文件名为chess.in。 第一行包含2个正整数n和k,1<=n,k<=2^32-1。

【输出格式】

输出文件chess.out 共1行,第n时刻城邦所具有的总战斗力。

【分析】

每次枚举一下,得到一个递推方程,f[i]=sum(f[i],f[i-1]..f[i-k]),直接算就可以了,开long long。

【代码】

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 typedef long long ll;
 6 
 7 ll n,k;
 8 int f[100010];
 9 
10 int main()
11 {
12     memset(f,0,sizeof(f));
13     scanf("%lld%lld",&n,&k);
14     f[1]=1; f[2]=3;
15     ll i=3,j;
16     while(i<=n){
17         j=1;
18         while(j<=k){
19             f[i]+=f[i-j];
20             j++;
21         }
22         f[i]+=i;
23         if(f[i]>=1234567890){printf("%d\n",f[i]);return 0;}
24         i++;
25     }
26     printf("%d\n",f[n]);
27     return 0;
28 }

皇家棋神

标签:chess   水平   输出   scan   clu   code   包含   题目   AC   

原文地址:https://www.cnblogs.com/Dawn-Star/p/9129695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!