BZOJ4856 JSOI2016 病毒感染 区间DP
题意:太长不给
这种题目一看就是区间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)$,然后这道题就做完了(撒花
#include<bits/stdc++.h>
using namespace std;
inline int read(){
;
char c = getchar();
while(!isdigit(c))
c = getchar();
while(isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return a;
}
][] , g[] , num[] , sum[] , N;
int main(){
memset(g , 0x3f , sizeof(g));
g[] = ;
N = read();
; i <= N ; i++)
sum[i] = (num[i] = read()) + sum[i - ];
; i ; i--)
; j <= N ; j++)
f[i][j] = f[i + ][j] + min(sum[j] - sum[i] << , sum[j] - sum[i] + num[i] * * (j - i));
; i < N ; i++)
; j <= N ; j++)
f[i][j] = f[i + ][j] + sum[j] - sum[i] + num[i] * * (j - i);
; i <= N ; i++)
for(int j = i ; j ; j--)
g[i] = min(g[i] , g[j - ] + f[j][i] + (sum[N] - sum[i]) * ((i - j << ) + ));
cout << g[N];
;
}
BZOJ4856 JSOI2016 病毒感染 区间DP的更多相关文章
- 区间dp提升复习
区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i, ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- poj2955 Brackets (区间dp)
题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...
- HDU5900 QSC and Master(区间DP + 最小费用最大流)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
- BZOJ 1260&UVa 4394 区间DP
题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...
- 区间dp总结篇
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
随机推荐
- javascript arguments参数问题
function f(a, b, c){ alert(arguments.length); // result: "2" a = 100; alert(arguments[0]); ...
- TensorFlow实现Softmax回归(模型存储与加载)
# -*- coding: utf-8 -*- """ Created on Thu Oct 18 18:02:26 2018 @author: zhen "& ...
- [20180118]tstats的问题.txt
[20180118]tstats的问题.txt --//关于使用tstats收集处理统计信息,可以看链接http://blog.itpub.net/267265/viewspace-1987839/ ...
- Centos7系统如何不重启系统识别新添加的硬盘?
今天在系统开机后插入三块硬盘,结果没有一块硬盘被系统识别到.后来找到了方法. echo "- - -" > /sys/class/scsi_host/host0/scan 上 ...
- DP E - Cheapest Palindrome
Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...
- 解决MySQL Workbench导出乱码问题
1.导出数据 2.默认CSV格式 3.乱码 4.解决 文件->另存为,会发现编码为UTF-8,正是MySQL表的编码方式.我们选择编码方式为ANSI,保存类型为所有,覆盖源文件
- 【美妙的Python之三】Python 对象解析
美妙的Python之Python对象 简而言之: Python 是能你无限惊喜的语言.与众不同. Python对象概念的理解,是理解Python数据存储的前提.Pyth ...
- oracle11gR2 手工创建基于asm存储的oracle实例
http://www.cnblogs.com/beanbee/archive/2012/09/22/2697689.html使用命令行手工建立Oracle11gR2数据库 通过命令行建立一个数据库可以 ...
- zabbix监控nginx连接数量
#!/bin/bash conn=`netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}' | grep "E ...
- linux grep 的使用
常用的 grep 选项有: -c 只输出匹配行的个数. -i 不区分大小写(只适用于单字符). -h 查询多文件时不显示文件名. -l 查询多文件时只输出包含匹配字符的文件名. ...