HDU-2525 Clone Wars 模拟

 2023-09-16 阅读 14 评论 0

摘要:题意:一言难尽,就不说了. 解法:我们只要把握好要保留哪些状态以及每天会有哪些动作要进行更新就可以了.该题的话,我们只需要保留:A.每天有多少克隆士兵存活在命题者所设定的世界里面,当然每个士兵都有一个生存天数的属性.B.每天有多少士兵正在培养,每个培养体当然有一个已经培

题意:一言难尽,就不说了.

解法:我们只要把握好要保留哪些状态以及每天会有哪些动作要进行更新就可以了.该题的话,我们只需要保留:
A.每天有多少克隆士兵存活在命题者所设定的世界里面,当然每个士兵都有一个生存天数的属性.
B.每天有多少士兵正在培养,每个培养体当然有一个已经培养的天数属性.
然后我们就要定义一些动作出来,从培养体变成士兵,已经获得材料.

代码如下:

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;int N, D, A, K, X;
// 保留两个信息,即当天克隆人已经生存的天数
// 以及正在培育中的人已经培育的天数
// 由于天数最多只有100天,所以我们可以使用数组来进行模拟 long long P[105], W[105]; // P表示克隆人信息,W表示培育的信息void init() {memset(P, 0, sizeof (P));memset(W, 0, sizeof (W));P[0] = N; // 表示有N个人已经存活了0天
}void updateday() {for (int i = D; i >= 0; --i) {P[i+1] = P[i];}for (int i = K; i >= 0; --i) {W[i+1] = W[i];}P[0] = W[K];
}void collect() { // 每天例行任务,收集克隆体种子 W[0] = 0;for (int i = 1; i <= A; ++i) {W[0] += P[i];}
}int main() {int T;scanf("%d", &T);while (T--) {long long cnt = 0;scanf("%d %d %d %d %d", &N, &D, &A, &K, &X);init();for (int i = 1; i <= X; ++i) { // 更新到要询问的天数 
            updateday();collect(); for (int i = 1; i <= D; ++i) {cnt += P[i];}}printf("%I64d\n", cnt * 5);}return 0;    
}

 

e12s模拟器?转载于:https://www.cnblogs.com/Lyush/archive/2012/12/29/2839225.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/65859.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息