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维

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <algorithm>
  4. #include <fstream>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <cstring>
  8. #include <string>
  9. #include <ctime>
  10. #include <queue>
  11. #include <stack>
  12. #include <vector>
  13. #include <map>
  14. #include <deque>
  15. #include <set>
  16.  
  17. using namespace std;
  18.  
  19. int dp[][][];
  20.  
  21. class Mutalisk
  22. {
  23. public:
  24. int minimalAttacks(vector <int> x)
  25. {
  26.  
  27. int r=,l=;
  28. int n=x.size();
  29. for (int _=;_<;_++)
  30. {
  31. int mid=(l+r)>>;
  32. memset(dp,,sizeof(dp));
  33. dp[][][]=;
  34.  
  35. for (int i=;i<n;i++)
  36. for (int n9=;n9<=mid;n9++)
  37. for (int n3=;n3<=mid;n3++)
  38. {
  39. if (dp[i][n9][n3]>mid ) continue;
  40.  
  41. for (int m9=;m9*<=x[i]+&&m9+n9<=mid;m9++)
  42. for (int m3=;m3*+m9*<=max(m9*,x[i]+)&&m3+n3<=mid;m3++)
  43. {
  44. if (m9+m3+max(,x[i]-*m9-*m3)>mid) continue;
  45. dp[i+][n9+m9][m3+n3]=min(dp[i+][n9+m9][n3+m3],dp[i][n9][n3]+max(,x[i]-*m9-*m3));
  46. }
  47. }
  48.  
  49. int ok=;
  50. for (int n9=;!ok&&n9<=mid;n9++)
  51. for (int n3=;!ok&&n3<=mid;n3++)
  52. if (dp[n][n9][n3]<=mid)
  53. {
  54. ok=;
  55. }
  56.  
  57. if (ok) r=mid;
  58. else l=mid;
  59. }
  60. return r;
  61. }
  62. };
  63.  
  64. int main()
  65. {
  66. int n;
  67. cin>>n;
  68. vector<int> p;
  69. for (int i=;i<=n;i++)
  70. {
  71. int x;
  72. cin>>x;
  73. p.push_back(x);
  74. }
  75. Mutalisk q;
  76. cout<<q.minimalAttacks(p)<<endl;
  77. return ;
  78. }

状态,需要剪枝。

Topcoder 658 650 point的更多相关文章

  1. topcoder 650 srm

    500 遇到这种构造题 就给跪了 比赛的时候想很多方法 DP,贪心,模拟 发现越写越烦琐.看到别人出这么快,肯定又是奇葩思路. 后来居然想到 2^50的暴力 +剪枝 不过暴力肯定卡你 IDEA: 只要 ...

  2. topcoder 650 srm div2 1000pts

    (15) 也是 DIV1 500 题意是给定 一个无向图 删去一条边以后 可不可以是完全二叉树. 细节点很多,开始做法居然求到桥去了,最近强联通写傻了. 最多1024-1个点 1024-1条边枚举 所 ...

  3. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  4. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  5. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  6. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  7. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  8. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  9. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

随机推荐

  1. mysql出错排查

    1,例如:Can't connect to local MySQL server through socket '/tmp/mysql-5.5.37.sock' (2) Mysql链接出错,请配置/A ...

  2. COGS 495. 窗口

    ★☆   输入文件:window.in   输出文件:window.out   简单对比时间限制:2 s   内存限制:256 MB [问题描述] 给你一个长度为N的数组,一个长为K的滑动的窗体从最左 ...

  3. 51nod 1432 独木舟

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承 ...

  4. Android系统级技巧合集

    Android系统级技巧合集(随时更新) #转载请注明来源# 1.高通骁龙系列查看CPU体质等级 CPU体质,即为CPU在工作频率下的电压.同一批次的CPU体质各有不同,体质越高,代表该颗CPU可在更 ...

  5. (译文)IOS block编程指南 3 概念总览

    Conceptual Overview(概览) Block objects provide a way for you to create an ad hoc function body as an ...

  6. 2019年今日头条机试_JAVA后台岗_第一题

        广度优先遍历: import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Nod ...

  7. Hystrix 断路器

    断路器: 当客户端访问服务端,发现服务端有异常不能进行访问时,就会执行一个fallback 方法.

  8. python基础一 day8 函数

    函数的定义与函数的调用是两个部分 定义函数的时候里面的代码不执行,等到调用函数的时候再执行 只写return和不写return返回None 函数遇到return,这个函数就被结束            ...

  9. 20道必须掌握的C++面试题

    20道必须掌握的C++面试题 在面试C++方面的工作时,经常会遇到各种面试题,这对应聘人员的知识掌握能力要求较高.本文将为大家带来的就是20道必须掌握的C++面试题,不要错过哦! 问1:请用简单的语言 ...

  10. 爬虫学习之csv读取和存储

    一.读取 该读取主要使用到csv里面的Reader().DictReader()方法,和引用io里面的StringIO进行对字符串进行封装 在处理网上的csv文件方式主要是有一下几方面: • 手动把C ...