Topcoder 658 650 point
Topcoder 658 div2 500 加强版
不过给了<=20,暴力肯定不行。
然后想DP方程,先二分可能需要的最大次数mid;
然后根据 mid 构造 DP方程。
假设x[i]需要 x个9 ,y个3,z个1,x*9+y*3+z>=x[i];
然后求出dp[n][[x]][y][z]<=mid 是否 符合。
转移方程为:dp[i+1][n9+m9][m3+n3]=min(dp[i+1][n9+m9][n3+m3],dp[i][n9][n3]+max(0,x[i]-9*m9-3*m3));
(i<n,m9+n9<=mid,m3+n3<=mid)
这里是5维
- #include <iostream>
- #include <cstdlib>
- #include <algorithm>
- #include <fstream>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <string>
- #include <ctime>
- #include <queue>
- #include <stack>
- #include <vector>
- #include <map>
- #include <deque>
- #include <set>
- using namespace std;
- int dp[][][];
- class Mutalisk
- {
- public:
- int minimalAttacks(vector <int> x)
- {
- int r=,l=;
- int n=x.size();
- for (int _=;_<;_++)
- {
- int mid=(l+r)>>;
- memset(dp,,sizeof(dp));
- dp[][][]=;
- for (int i=;i<n;i++)
- for (int n9=;n9<=mid;n9++)
- for (int n3=;n3<=mid;n3++)
- {
- if (dp[i][n9][n3]>mid ) continue;
- for (int m9=;m9*<=x[i]+&&m9+n9<=mid;m9++)
- for (int m3=;m3*+m9*<=max(m9*,x[i]+)&&m3+n3<=mid;m3++)
- {
- if (m9+m3+max(,x[i]-*m9-*m3)>mid) continue;
- dp[i+][n9+m9][m3+n3]=min(dp[i+][n9+m9][n3+m3],dp[i][n9][n3]+max(,x[i]-*m9-*m3));
- }
- }
- int ok=;
- for (int n9=;!ok&&n9<=mid;n9++)
- for (int n3=;!ok&&n3<=mid;n3++)
- if (dp[n][n9][n3]<=mid)
- {
- ok=;
- }
- if (ok) r=mid;
- else l=mid;
- }
- return r;
- }
- };
- int main()
- {
- int n;
- cin>>n;
- vector<int> p;
- for (int i=;i<=n;i++)
- {
- int x;
- cin>>x;
- p.push_back(x);
- }
- Mutalisk q;
- cout<<q.minimalAttacks(p)<<endl;
- return ;
- }
状态,需要剪枝。
Topcoder 658 650 point的更多相关文章
- topcoder 650 srm
500 遇到这种构造题 就给跪了 比赛的时候想很多方法 DP,贪心,模拟 发现越写越烦琐.看到别人出这么快,肯定又是奇葩思路. 后来居然想到 2^50的暴力 +剪枝 不过暴力肯定卡你 IDEA: 只要 ...
- topcoder 650 srm div2 1000pts
(15) 也是 DIV1 500 题意是给定 一个无向图 删去一条边以后 可不可以是完全二叉树. 细节点很多,开始做法居然求到桥去了,最近强联通写傻了. 最多1024-1个点 1024-1条边枚举 所 ...
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
随机推荐
- 通过HA方式操作HDFS
之前操作hdfs的时候,都是固定namenode的地址,然后去操作.这个时候就必须判断namenode的状态为active还是standby,比较繁琐,如果集群使用了HA的形式,就很方便了 直接上代码 ...
- Oracle ORA
ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...
- 洛谷 P1910 L国的战斗之间谍(水题日常)
题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个人都有这样一些数据:A(能得到 ...
- android和IOS长连接区别
http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 首先我们必须知道,所有的推送功能必须有一个客户端和服务器的长连接,因为推送是由服务 ...
- 图形学基础 | 实现OBJ文件的载入
1. tiny_obj_loader.h 的使用include这个头文件需要先定义一个宏 #define TINYOBJLOADER_IMPLEMENTATION#include "tiny ...
- 什么是cookie(前段时间看到别人简历上把cookie和localStorage混淆了所以专门又去了解了下)
在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并不是用来做服务器存储 ...
- 条款31:将文件间的编译依存关系降至最低(Minimize compilation dependencies between files)
NOTE1: 1.支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 2.程序库头文件应 ...
- POJ 1511 Invitation Cards (最短路的两种方法spfa, Dij)
题意: 给定n个点, m条路, 求1到 2 ~n的最短路之和加上2~n到1的最短路之和 分析: 裸最短路, 求其他点到源点的距离只需要把边方向再从源点求一次即可 spfa代码 #include< ...
- wps左侧显示目录
单击视图----文档结构图,在下拉选项中选择靠左即可,如图所示
- shell if判断总结
一.if的基本语法: if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 else 符合该条件执行的语句 ...