【2015福州夏令营】三重镇
2015-11-03 11:00
295 查看
【2015福州夏令营】三重镇
Time Limit:10000MS Memory Limit:65536K
Description
小西同学最近喜欢上了iOS 游戏《三重镇Triple Town》。游戏之余,小西也在思考如何才能在这个游戏中获得更高的分数。
游戏在一个1 * 3的地图中进行。初始的时候,所有的格子都是空白位置。游戏给定一个建造序列,玩家按照此建造序列依次选择空白位置建造相应的建筑单位。建筑有九个不同的等级,标注为L1,L2….,L9。
当玩家在一个空白位置建造单位之后,有可能引起反应。反应的构成条件是:当前的三个格子中的建筑物都是同一等级的,则这三个建筑将合并为一个下一等级的建筑,此建筑的位置为最后建造的建筑单位位置,其他位置将变回空格。另外需要注意的是,L9 为建筑的最高等级,所以三个L9并不会合并。
游戏中还设有两种道具,分别为“星星”和“炸弹”。
在游戏开始时,玩家被给定p个星星道具和q个炸弹道具,玩家可以在任意时刻使用。两者功能如下:
“星星”道具:可以放置在一个空格位置。当星星被放置时,星星会自动变为能引起反应的最高等级建筑。当在该位置不能引起任何反应时,星星变为L1。
例如,当前有两个位置上是L5,此时放置星星,则会变为L5,同时导致一次反应,最后放置星星的位置上出现了一个L6,其他位置都是空白。
“炸弹”道具:炸弹道具可以放在一个有建筑的位置上,作用为炸掉这个建筑并将该位置恢复为空格。当使用炸弹时,得分将扣除被炸掉的建筑的一半分数(即得分为负数)。
在游戏的进行过程中,玩家必须按照给定的顺序进行建造,而且不能跳过任何一个给定的建筑,但可以随时穿插使用两种道具,也可以随时结束游戏。游戏的目标是,通过合理的操作,取得最高的分数。
Input
第一行两个整数p, q。
第二行一个整数n。
第三行n个整数,表示所有给定的建筑的等级。保证输入的数一定在[1..9]内
Output
一个整数表示答案。
Sample Input
Sample Output
Hint
【数据范围】
对于20%的数据:0 <= n, p, q <= 5
对于另外20%的数据:p = q = 0
对于100%的数据:n <= 50, p,q <= 30
Time Limit:10000MS Memory Limit:65536K
Description
小西同学最近喜欢上了iOS 游戏《三重镇Triple Town》。游戏之余,小西也在思考如何才能在这个游戏中获得更高的分数。
游戏在一个1 * 3的地图中进行。初始的时候,所有的格子都是空白位置。游戏给定一个建造序列,玩家按照此建造序列依次选择空白位置建造相应的建筑单位。建筑有九个不同的等级,标注为L1,L2….,L9。
当玩家在一个空白位置建造单位之后,有可能引起反应。反应的构成条件是:当前的三个格子中的建筑物都是同一等级的,则这三个建筑将合并为一个下一等级的建筑,此建筑的位置为最后建造的建筑单位位置,其他位置将变回空格。另外需要注意的是,L9 为建筑的最高等级,所以三个L9并不会合并。
游戏中还设有两种道具,分别为“星星”和“炸弹”。
在游戏开始时,玩家被给定p个星星道具和q个炸弹道具,玩家可以在任意时刻使用。两者功能如下:
“星星”道具:可以放置在一个空格位置。当星星被放置时,星星会自动变为能引起反应的最高等级建筑。当在该位置不能引起任何反应时,星星变为L1。
例如,当前有两个位置上是L5,此时放置星星,则会变为L5,同时导致一次反应,最后放置星星的位置上出现了一个L6,其他位置都是空白。
“炸弹”道具:炸弹道具可以放在一个有建筑的位置上,作用为炸掉这个建筑并将该位置恢复为空格。当使用炸弹时,得分将扣除被炸掉的建筑的一半分数(即得分为负数)。
在游戏的进行过程中,玩家必须按照给定的顺序进行建造,而且不能跳过任何一个给定的建筑,但可以随时穿插使用两种道具,也可以随时结束游戏。游戏的目标是,通过合理的操作,取得最高的分数。
Input
第一行两个整数p, q。
第二行一个整数n。
第三行n个整数,表示所有给定的建筑的等级。保证输入的数一定在[1..9]内
Output
一个整数表示答案。
Sample Input
1 1 5 4 5 5 5 6
Sample Output
39750
Hint
【数据范围】
对于20%的数据:0 <= n, p, q <= 5
对于另外20%的数据:p = q = 0
对于100%的数据:n <= 50, p,q <= 30
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int value[10] = {0, 4, 20, 100, 500, 1500, 5000, 20000, 100000, 500000}; int f[2][10][10][10][51][51]; int p, q, n, a[101], ans; int use; void renew(int a, int b, int c, int d, int e, int f, int val) { if (::f[a][b][c][d][e][f]<val)::f[a][b][c][d][e][f] = val; } int main() { scanf("%d%d%d", &p, &q, &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); memset(f, 0xe0, sizeof(f)); int F = 1; f[0][0][0][0][0][0] = 0; for (int i = 0; i <= n; i++){ F = !F; memset(f[!F], 0xe0, sizeof(f[!F])); for (int r = 0; r <= p; r++) for (int s = 0; s <= q; s++) for (int j = 0; j < 10; j++) for (int k = 0; k < 10; k++) for (int l = 0; l < 10; l++) if (f[F][j][k][l][r][s] >= 0){ use = max(use, i); ans = max(ans, f[F][j][k][l][r][s]); int now = a[i + 1], val = f[F][j][k][l][r][s]; //use star if (r != p){ if (j == 0){ if (k == l && k != 9) renew(F, k + 1, 0, 0, r + 1, s, val + value[k] + value[k + 1]); else renew(F, 1, k, l, r + 1, s, val + value[1]); } if (k == 0){ if (j == l && j != 9) renew(F, 0, j + 1, 0, r + 1, s, val + value[j + 1] + value[j]); else renew(F, j, 1, l, r + 1, s, val + value[1]); } if (l == 0){ if (k == j && j != 9) renew(F, 0, 0, j + 1, r + 1, s, val + value[j + 1] + value[j]); else renew(F, j, k, 1, r + 1, s, val + value[1]); } } //use bomb if (s != q){ if (j != 0) renew(F, 0, k, l, r, s + 1, val - value[j] / 2); if (k != 0) renew(F, j, 0, l, r, s + 1, val - value[k] / 2); if (l != 0) renew(F, j, k, 0, r, s + 1, val - value[l] / 2); } //put if (i < n){ if (j == 0){ if (k == l && k != 9 && now == k) renew(!F, k + 1, 0, 0, r, s, val + value[k] + value[k + 1]); else renew(!F, now, k, l, r, s, val + value[now]); } if (k == 0){ if (j == l && j != 9 && now == j) renew(!F, 0, j + 1, 0, r, s, val + value[j + 1] + value[j]); else renew(!F, j, now, l, r, s, val + value[now]); } if (l == 0){ if (k == j && j != 9 && now == j) renew(!F, 0, 0, j + 1, r, s, val + value[j + 1] + value[j]); else renew(!F, j, k, now, r, s, val + value[now]); } } } } printf("%d\n", ans); }
相关文章推荐
- hashcode的理解
- 树形图计数
- MACHINE_START与MACHINE_END
- gk7101 imx222开发环境搭建
- 众数问题
- warez世界顶级压缩作品网站
- Spring mvc中@RequestMapping 6个基本用法小结
- 微信支付
- 进程间通信:匿名管道通信
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
- 对IE6下url参数中奇数个中文乱码的问题解决
- 代理模式(一)
- 获取输入日期的星期
- 【有人@我】Android中高亮变色显示文本中的关键字
- n-1位数
- Linux定时备份Mysql
- [LeetCode]55. Single Number独数
- 【有人@我】Android中高亮变色显示文本中的关键字
- linux系统安装到第二块磁盘
- iOS视图生命周期