zoukankan      html  css  js  c++  java
  • 皇家棋神

    【题目描述】

    有 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
    ",f[i]);return 0;}
    24         i++;
    25     }
    26     printf("%d
    ",f[n]);
    27     return 0;
    28 }
    黎明的朝阳,会为苦难中最坚强的信念升起
  • 相关阅读:
    [原创]c#快速排序类 Virus
    [原创]关系,依赖, Virus
    [原创]外包 Virus
    [原创]异步调用I/O方法的使用 Virus
    [原创]一个查找并且替换的算法 Virus
    封装原来的DirectoryInfo类,添加事件,可以代替FileSystemWatcher 类 Virus
    [原创]包头人在北京<一> Virus
    [原创]异步调用,多线程,委托 Virus
    [原创]异步,跨线程,非阻塞,DNS,Socket Virus
    [原创]大家动脑吧,一个面试题 Virus
  • 原文地址:https://www.cnblogs.com/Dawn-Star/p/9129695.html
Copyright © 2011-2022 走看看