传送门

原Word文档

题意:太长不给


这种题目一看就是区间DP

设$f_i$表示治愈了前$i$个村子的时候最少死了多少村民,又设前缀和为$sum_i$,通过枚举折返时最后经过的村子$j$,并且提前计算$i+1$到$N$中死的村民数量,可以得到这样子的方程:$$f_i=\min\limits_{j=1}^i\{f_{j-1}+g_{j,i}+(sum_N-sum_i) \times ((i-j) \times 3 + (i-j+1) + 1)\}$$其中$g_{j,i}$表示从$j$到$i$到$j$再到$i$的过程中最少的死的村民数量,保证$j$号点一开始没有被治愈。

所以我们现在的关键点是求出$g_{j,i}$。考虑到在$j$与$i$之间的村子不知道是在$j$到$i$的路上被治愈还是在$i$到$j$的路上被治愈,所以考虑预处理这一项。

考虑设$h_{i,j}$表示从到达$i$点开始计算死亡人数,完成治愈完$i$到$j$村庄的人的任务的前提下最少的死亡人数。考虑第$i$个村庄是否在一开始就治愈,可以得到转移方程:$$h_{i,j}=h_{i+1,j}+\min\{sum_j-sum_i + a_i \times ((j - i) \times 3) , (sum_j - sum_i) \times 2\}$$

那么$g_{i,j}=h_{i+1,j} + sum_j - sum_i + num_i \times ((j - i) \times 3)$,然后这道题就做完了(撒花

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 inline int read(){
 5     int a = 0;
 6     char c = getchar();
 7     while(!isdigit(c))
 8         c = getchar();
 9     while(isdigit(c)){
10         a = (a << 3) + (a << 1) + (c ^ '0');
11         c = getchar();
12     }
13     return a;
14 }
15
16 long long f[3010][3010] , g[3010] , num[3010] , sum[3010] , N;
17
18 int main(){
19     memset(g , 0x3f , sizeof(g));
20     g[0] = 0;
21     N = read();
22     for(int i = 1 ; i <= N ; i++)
23         sum[i] = (num[i] = read()) + sum[i - 1];
24     for(int i = N - 1 ; i ; i--)
25         for(int j = i + 1 ; j <= N ; j++)
26             f[i][j] = f[i + 1][j] + min(sum[j] - sum[i] << 1 , sum[j] - sum[i] + num[i] * 3 * (j - i));
27     for(int i = 1 ; i < N ; i++)
28         for(int j = i + 1 ; j <= N ; j++)
29             f[i][j] = f[i + 1][j] + sum[j] - sum[i] + num[i] * 3 * (j - i);
30     for(int i = 1 ; i <= N ; i++)
31         for(int j = i ; j ; j--)
32             g[i] = min(g[i] , g[j - 1] + f[j][i] + (sum[N] - sum[i]) * ((i - j << 2) + 2));
33     cout << g[N];
34     return 0;
35 }

转载于:https://www.cnblogs.com/Itst/p/9832213.html

BZOJ4856 JSOI2016 病毒感染 区间DP相关推荐

  1. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  2. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  3. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  4. UVA10003 切木棍 Cutting Sticks(区间DP、细节)

    整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...

  5. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

  6. 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★

    P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...

  7. poj1651(区间dp)

    题目连接:http://poj.org/problem?id=1651 题意:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积.直到只剩下首尾两个数 ...

  8. HDU 5115 Dire Wolf ——(区间DP)

    比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: 1 #i ...

  9. 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]

    传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...

最新文章

  1. R构建二次回归模型( Quadratic Regression)
  2. 把毛选和鲁迅全集喂给AI后,写出来的高考作文太对味了
  3. python爬虫之多线程、多进程+代码示例
  4. tomcat 洞合集
  5. 凸优化第五章对偶 5.9 广义不等式
  6. Ansible 命令
  7. oracle 11g压缩分区表,ORACLE 10g和11g压缩分区表操作脚本
  8. Nginx高可用极速实战:通过KeepAlived与华为云虚拟IP实现
  9. 地铁应急指挥系统解决方案
  10. WiFi 转DMX512模块 支持Art-Net sACN RDM DMX
  11. 项目管理第十二章项目采购管理
  12. 关闭或者开启Windows defender防火墙
  13. c2c开店流程图_c2c的主要业务流程图以及路线?
  14. 采集PMS7003 颗粒度传感器数据,显示在TFT屏幕上,并通过webapi上传(1/2)
  15. 获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
  16. 键盘win和alt互换了怎么改回
  17. Python 函数库 APIs 编写指南
  18. 如何将多个文件夹重命名
  19. 美国公开宣布WannaCry真凶——就是朝鲜!
  20. 前端网页配色网站推荐

热门文章

  1. Mac OS 在远程主机(Linux 系统)上使用命令执行 sql 脚本文件(使用的是 MySQL 数据库)
  2. css 获取屏幕宽度_设备像素、设备独立像素、CSS像素、分辨率、PPI、devicePixelRatio 的区别...
  3. matlab resample上采样,resample matlab实现
  4. keras添加正则化全连接_TensorFlow keras卷积神经网络 添加L2正则化
  5. LeetCode 01. 两数之和
  6. 剑指 Offer 40-----50
  7. 文章id 文章标题点击量php,WordPress如何通过文章ID获取文章标题等信息
  8. 初学者宝典:C语言入门基础知识大全(中)
  9. C语言和图形界面编程打造——浪漫的表白程序
  10. java中的wn是什么意思_wnJava--做简捷的互动社区网站