Solution

大致感受一下,我们就可以发现似乎激光塔一定要放在最末尾才能最大化一个激光塔给蚂蚁的伤害,所以所有的激光塔我们强制全部放在最末尾.然后呢,我们需要把前面的多余空位合理安排给放射塔和激光塔,这个过程可以用DP来解决,大致就是设F[i][j] 表示前i+j格空位放置i座干扰塔,j座放射塔给蚂蚁带来的最大伤害.没了.

f[i][j]=max(f[i - 1][j] + g * j * b * k,f[i][j - 1] + g * (b * i + t) * k)

好,但是由于数据实在太大,所以要加上复杂的高精度,嗯,大概就是要写高精乘高精,高精乘低精,高精减低精,高精加高精,高精加低精,高精度数大小比较等等,不过没事,也就几行...

#include<bits/stdc++.h>
using namespace std;
const int mo = 100000000, maxn = 1055;
struct node{long long w[30];inline void operator += (long long x){w[1] += x; int i = 1;while (w[i] >= mo) w[i] -= mo, ++ w[++i];if (i > w[0]) w[0] = i;}
};inline node operator + (node a, node b){for (int i = 1; i <= b.w[0]; ++i) a.w[i] += b.w[i];a.w[0] = max(a.w[0], b.w[0]);for (int i = 1; i <= a.w[0]; ++i) if (a.w[i] >= mo) a.w[i] -= mo, ++ a.w[i + 1];if (a.w[a.w[0] + 1]) ++ a.w[0];return a;
}inline node operator * (node a, node b){node c; memset(c.w, 0, sizeof(c.w)); for (int i = 1; i <= a.w[0]; ++i) for (int j = 1; j <= b.w[0]; ++j) c.w[i + j - 1] += a.w[i] * b.w[j];c.w[0] = a.w[0] + b.w[0] - 1;for (int i = 1; i <= c.w[0]; ++i) if (c.w[i] >= mo) c.w[i + 1] += c.w[i] / mo, c.w[i] %= mo;while (c.w[c.w[0] + 1]) ++ c.w[0];return c;
}inline node operator * (node a, long long x){for (int i = 1; i <= a.w[0]; ++i) a.w[i] *= x;for (int i = 1; i <= a.w[0]; ++i) if (a.w[i] >= mo) a.w[i + 1] += a.w[i]/mo, a.w[i] %= mo;if (a.w[a.w[0] + 1]) ++ a.w[0];return a;
}inline node operator - (node a, node b){for (int i = 1; i <= b.w[0]; ++i) a.w[i] -= b.w[i];for (int i = 1; i <= a.w[0]; ++i) if (a.w[i] < 0) a.w[i] += mo, -- a.w[i + 1];while (a.w[0] > 0 && !a.w[a.w[0]]) -- a.w[0];return a;
}inline bool operator < (node a, node b){if (a.w[0] != b.w[0]) return a.w[0] < b.w[0];for (int i = a.w[0]; i; --i) if (a.w[i] != b.w[i]) return a.w[i] < b.w[i];return false;
}inline void read(node &a){char s[300]; memset(a.w, 0, sizeof(a.w));scanf("%s", s); int m = strlen(s);int x,j,i;for (x = 0, j = 1, i = m - 1; ~i; --i, j *= 10){if (j == mo) j = 1, a.w[++a.w[0]] = x, x = 0;x += (s[i] - '0') * j;}if (x) a.w[++ a.w[0]] = x;if (!a.w[0]) a.w[0] = 1;
}inline void print(node a){printf("%lld", a.w[a.w[0]]);for (int i = a.w[0] - 1; i > 0; --i){for (int j = 10; j < mo; j *= 10) if (a.w[i] < j) putchar('0');printf("%lld", a.w[i]);}puts("");
}long long n;
node  r, g, b, t;
node f[maxn][maxn], ans; inline node max(node a, node b){return a < b ? b : a;
}int main(){scanf("%lld", &n);read(r); read(g); read(b); read(t);//return 0;for (long long i = 1; i <= n; ++i) f[0][i] = f[0][i - 1] + g * t * (n - i);  for (long long i = 1; i < n; ++i) for (long long j = 1, k; k = n - i - j; ++j)f[i][j] = max(f[i - 1][j] + g * j * b * k, // b * k Ϊ¼ÓÁËÒ»×ù¸ÉÈÅËþºó¶à³öµÄʱ¼ä, g * j Ϊj×ù·ÅÉäËþµÄÉ˺¦. f[i][j - 1] + g * (b * i + t) * k);// Õâ×ùмӵķÅÉäËþÔì³ÉµÄÉ˺¦ÊÇ g, ´Ëʱÿ¸ñ³ÖÐøµÄʱ¼äΪ i * b + t, ¹²ÓÐk¸ñ,ÄÇô// É˺¦Îª g * (i * b + t) * kfor (long long i = 0; i <= n; ++i) for (long long j = 0; j <= n - i; ++j) {long long k = n - i - j; if (k < 0) continue;ans = max(ans, f[i][j] + (t + b * i) * k * r);}print(ans);             return 0;
}
/*
400 2147483647 2147483647 2147483647 1000
*/

转载于:https://www.cnblogs.com/juruohx/p/7779618.html

洛谷-P2198 杀蚂蚁相关推荐

  1. luogu P2198 杀蚂蚁

    题目描述 经过小FF的研究,他发现蚂蚁们每次都走同一条长度为n个单位的路线进攻, 且蚂蚁们的经过一个单位长度所需的时间为T秒.也就是说,只要小FF在条路线上布防且给蚂蚁造成沉痛伤害就能阻止蚂蚁的进军. ...

  2. 洛谷 P1886 滑动窗口

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  3. 闲来无事刷水题、简单博弈论专题、sg函数、洛谷

    记 今天闲来无事,不想刷codeforces了,到洛谷提高组训练营找几道水题刷着玩玩(虽然自己早已过了打OI的年纪)- 简单博弈论专题 P1199 三国游戏 这么考虑,由于电脑总是不能让我搭配出当前能 ...

  4. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏

    洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...

  5. 【洛谷】P2356 弹珠游戏 c++

    题目背景 元宵节不放假挺郁闷的,于是时间机智的改到了星期6一整天! 题目描述 MedalPluS 和他的小伙伴 NOIRP 发掘了一个骨灰级别的游戏--超级弹珠. 游戏的内容是:在一个 n*n 的矩阵 ...

  6. 洛谷大起义胜利的经验总结

    UPD1(2019.7.11):chen_zhe解除了对我的禁言,但仍保持大脑皮层对刷题重心转到LibreOJ的决策,50年不变. 2019-07-09 9:54 结束黑暗无光的\(luogu\)统治 ...

  7. 《终结者·洛谷》第4章

    songhongyi摸了摸自己那已经恢复不少的身体,望了望窗外 房外已是大雪纷飞,街上一个人也没有···· 空与白之灵打开了洛谷,打开了题库,点进了P4379 空与白之灵进入了虚拟战场,直接套上了C党 ...

  8. 洛谷 P1650 赛马

    洛谷 P1650 赛马 题目 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者 ...

  9. 洛谷P1650赛马与codevs 2181 田忌赛马

    洛谷P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负 ...

最新文章

  1. 蓝桥杯--2012--取球游戏
  2. python【数据结构与算法】循环赛日程表(分治)
  3. Redis数据库教程——系统详解学习Redis全过程
  4. [C语言] 文件操作,解压华为官方固件UNDATE.APP工具(源代码);
  5. 第十章 某些算法的分治法解释
  6. neo4j / cypher:悬挂查询参数
  7. 禁用win10触摸屏手势_Win10平板边缘滑动手势大全及开启/关闭方法
  8. ios开发学习--动画(Animation)效果源码分享--系列教程1
  9. 实现简单的web框架
  10. MyBatis映射表问题
  11. 我的 fedora 14 安装备忘
  12. APP兼容性覆盖测试
  13. 去携程面试,问HR待遇如何,HR说我太看重钱,不录取我
  14. C++二分查找相关函数用法总结
  15. 灵活的Vue组件——原来这么简单
  16. 第三方支付频频被罚款,市场驱动下或是故意为之?
  17. MATLAB神经网络43个案例分析
  18. 论文解读 | CornerNet: Detecting Objects as Paired Keypoints
  19. 任何产品需求,挖到最后都是人性
  20. ps安装程序检测到计算机重启过程,photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法...

热门文章

  1. Filecoin周报-39期:Filecoin Testnet/3按约定如期上线!
  2. 软件测试行业的现状和前景
  3. Access 2003 的输入掩码(Input Mask)
  4. access身份证号掩码_ACCESS掩码表
  5. 微信真的在后台频繁读取用户相册吗?
  6. JAVA SE面试题(全)
  7. 电锯惊魂—经典的语言
  8. 19. 详解网络请求Axios
  9. 江苏省高中计算机合格性考试题目,江苏省2020年普通高中学业水平合格性考试试卷(含答案)...
  10. MIT6.005 Problem Set 1 Tweet Tweet