BZOJ4856 JSOI2016 病毒感染 区间DP

传送门

原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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go get 的不再src目录中_Go 每日一库之 sqlc:根据 sql 生成代码

简介在 Go 语言中编写数据库操作代码真的非常痛苦&#xff01;database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。大量的模板代码不仅写起来烦&#xff0c;而且还容易出错。有时候字段类型修改了一下&#xff0c;可能就需要改动很多地方&#xff1b;添…

查看linux服务器的系统信息

查看linux服务器的系统信息新接手了几台linux的服务器,第一步当然是要了解这些服务器的软硬件配置.现在就写出我这次用的一些命令.首先当然要取得机器的IP,用户名和密码(呵呵,不知道就找原来的管理员要哈)登陆之后,首先看到的就是机器的名称,一般提示符就有了,如[rootlocalhost…

Windows下更改MySQL数据库的存储位置

一.同一主机下位置的转移 在mysql安装完成后&#xff0c;要修改数据库存储的位置&#xff0c;比如从安装目录下的C:\Program Files\MySQL\MySQL Server 5.0\Data文件夹转移到D:\mySQLData文件夹。 1、在D:\下新建mySQLData文件夹 2、停止MySQL服务&#xff0c;将C:\Program Fil…

apk去除签名验证工具安卓版_App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!...

一、序在将 App 发布到市场之前&#xff0c;很重要的一个步骤就是为 APK 进行签名&#xff0c;大部分时候&#xff0c;这个操作隐藏在了打包的流程中&#xff0c;而不被我们注意到。签名的作用&#xff0c;除了证明 App 的所有权之外&#xff0c;还可以帮助 Android 市场和设备…

初入WEBOTS半个月来的一点总结

对于我这一个从十一假期结束后才刚刚接触webots的小白来说&#xff0c;webots简直就是一个噩梦。在这里记录一下噩梦的发展历程。 在最初安装webots时就遇到了麻烦。安装7.0.3总是出问题。程序找不到接入点。替换dll文件也没有用更新运行库也不行。最好索性重新买固态硬盘做了个…

skype 回放设备出现问题

最近用skype拨打电话换台电脑会出现“回放设备出现问题”&#xff0c;拨通号码后会自动跳掉无法拨通 一直更新声音驱动器&#xff0c;结果发现跟声卡驱动半毛钱关系都没有&#xff0c;是要插入耳麦。

sonar java_修复Sonar中常见的Java安全代码冲突

sonar java本文旨在向您展示如何快速修复最常见的Java安全代码冲突。 它假定您熟悉代码规则和违规的概念以及Sonar如何对其进行报告。 但是&#xff0c;如果您以前从未听过这些术语&#xff0c;则可以阅读Sonar Concepts或即将出版的有关Sonar的书 &#xff0c;以获取更详细的解…

linux服务器性能查看

################### cpu性能查看 ############################################################1、查看物理cpu个数&#xff1a;cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l2、查看每个物理cpu中的core个数&#xff1a;cat /proc/cpuinfo |grep "…

android sdk 安装_Appium+python自动化1-环境安装(上)

前言appium可以说是做app自动化测试最火的一个框架&#xff0c;它的主要优势是支持android和ios&#xff0c;另外脚本语言也是支持java和Python。小编擅长Python&#xff0c;所以接下来的教程是appiumpython的实例。学习appium最大的难处在于环境的安装&#xff0c;80%的人死于…

Mean

题目描述 NiroBC 是猫咪学堂一年级的新生&#xff0c;开学第一天&#xff0c;学堂组织了一场迎新会&#xff0c;在 迎新会上&#xff0c;猫咪们会互相赠送礼物。 一年级的新生共有 N 只猫咪&#xff0c;编号为 1 . . . N&#xff08;包括 NiroBC 自己&#xff09;&#xff0c;其…

如何开启mysql计划事件

首先在sql中查询计划事件的状态&#xff1a;SHOW VARIABLES LIKE event_scheduler如果返回的是off表示当前是关闭状态&#xff0c;如果是on当前已经开启了计划任务。在mysql程序的目录下找到my.ini文件&#xff0c;添加一个项&#xff1a;event_scheduler 1保存后重启mysql服务…

在Java等于方法中进行精确比较

多年来&#xff0c;我一直在处理旧版Java代码&#xff0c;因此遇到了微妙的逻辑和性能问题&#xff0c;这些问题可以追溯到不正确覆盖的Object.equals&#xff08;Object&#xff09;方法。 尽管“等于”方法背后的概念看似简单&#xff0c;但Josh Bloch在《 有效Java》中指出&…

python爬虫网络出错怎么办_Python爬虫常见问题

第一个问题&#xff1a;JS加密如何突破 (1) 熟练掌握Chrome的开发者工具的各个功能&#xff0c;Elements&#xff0c; Network&#xff0c;Source (2) 认真观察&#xff0c;善于思考。Network查看加载流程&#xff0c;找可疑的xhr请求&#xff0c;设置xhr断点&#xff0c;通过C…

Linux Top 命令解析 比较详细

TOP命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况。 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监…

用webstorm在chrome 调试页面时一直弹出 copy authorization url to clipboard

用chrome来调试页面&#xff0c;每次刷新会弹出 requested without authorization, 是因为更新后的bug&#xff0c;可以在Setting - debugger中设置 转载于:https://www.cnblogs.com/dxxzst/p/WebStorm.html

2003 cant connect to MySQL server on 'XXX.XXX.XXX.XXX'

数据库在配置正常并且也配置了mysql 在局域网上互相访问的用户和ip但是会出现2003 cant connect to MySQL server on XXX.XXX.XXX.XXX ,本地机子连接一切正常但是局域网其他机器就是无法连接。通过检测发现是电脑的防火墙问题&#xff0c;关闭防火墙后电脑上的数据库就可以被局…

C++插入中文到mysql乱码

C 插入中文字符到mysql数据库出现乱码&#xff0c;奇怪的是直接在数据库写查询语句直接进行插入&#xff0c;是不会出现乱码 然后就根据一些材料把数据库&#xff0c;得编码形式改为gb2312但是结果仍然乱码中&#xff08;设置my.ini中的字符集&#xff09;。 猜想 有可能是C和…

mountain_OS X Mountain Lion上的多个Java版本

mountain在Mountain Lion之前&#xff0c;Java被捆绑在OS X中。似乎在升级期间&#xff0c;我在计算机上安装的Java 6版本被删除了。 显然&#xff0c;在升级过程中卸载Java的原因是Java运行时存在的安全问题。通过这种方式&#xff0c;您不得不安装可解决此安全问题的最新版本…

python手机自动化测试脚本语言_Python+Appium实现APP自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 http://appium.io/ ​ 点击下载按钮会到GitHu…

Win7无线网络和有线网络网络负载选择

最近在看如何让有线网络和无线网络实现对接。win7网络可以同时连接两个网卡无线和有线&#xff0c;在同时间上连接两个网络用 的是哪个网络&#xff0c;用是哪个流量(可以用currPorts软件来查看电脑用是哪个网络的流量&#xff09;&#xff0c;哪个网络是闲置网络。 同时可以…