如此可爱的动态规划见过么?

  相信各位都非常喜欢动态规划,那我就写一道可爱的动态规划的题解吧。

题目:https://www.luogu.com.cn/problem/P5774

题意:

  题意“挺明白”的。。。题意:给你一个序列每个数表示第i个村庄一天要因感染而死的人数,大佬你能治这种病,花费一天治好一个村庄,而你移动还要花费一天,问治愈好所有村庄最少死的人。限制:只要从i走到i-1,就必须把i之前的所有村庄全部治愈。

分析:

  这题很容易看出是动态规划,但是,怎么规划呢(要求时间效率n方),暴力规划n3,我们并不能很好的解决它,那咋办:单调队列??,好像没啥单调。。。我们只能想别的办法:二分答案??,好像也不是很好判断死多少人可以完成,还是要回到动态规划。

  枚举长度,起点,断点三个是不行的,那我们可不可考虑先维护2个?

  我们先枚举起点和长度:那我们怎么做才能不用枚举断点呢?——加限制:我们定义Dp[i][j]表示治愈好i到j所有人过程中i到j中的死亡的最少人数,并且要求路线是i到j到i,于是,我们就可不枚举断点了,为什么呢:想一想,我们限制路线之后,Dp[i][j]的转移就不由得你去枚举断点了

  然后想出转移方程(这个就推导一下就好了,关键是怎么n3变n2

  Dp[i][j]=Dp[i+1][j]+min((sum[j]-sum[i])*2,a[i]*(d-1)*3+sum[j]-sum[i]);

  可是显然Dp[i][n]并不是我们最后想要的结果,因为我们并不一定要1到n到1,中间可以回头。

  不过没关系,我们已经成功一半了,我们再定义一个数组dp[i]表示前i个村庄被治愈之后,1到n总共最少死的人数,你会发现:不用枚举起点,太棒了,只要想出转移方程来就可以了:

  dp[i]=min(dp[j]+Dp[j+1][i]+(4*(i-j)-2)*(sum[n]-sum[i]))(j属于n*,j<i)

  最后,显然Dp[n]就是我们想要的答案了。

  很可爱的动态规划,大家是不是更爱动态规划了呢?

代码:

  又是极度的简单

#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
const int maxn=+;
long long a[maxn],sum[maxn],Dp[maxn][maxn],dp[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
sum[i]=sum[i-]+a[i];
}
for(int d=;d<=n;d++)
for(int i=,j;(j=i+d-)<=n;i++)
Dp[i][j]=Dp[i+][j]+min((sum[j]-sum[i])*(long long),a[i]*(long long)(d-)*(long long)+sum[j]-sum[i]);
memset(dp,0x3f,sizeof(dp));
dp[]=;
for(int i=;i<=n;i++)
for(int j=;j<i;j++)
dp[i]=min(dp[i],dp[j]+Dp[j+][i]+((long long)*(long long)(i-j)-(long long))*(sum[n]-sum[i]));
printf("%lld",dp[n]);
return ;
}

没注释,各位大佬应该一看就懂

槽点:

  死亡人数用long long,你在逗我。。。

精华:

  多分析,可尝试动态规划多次:像本题一次区间规划,一次线性规划。

我们是:OIer~~~,我们要:Ac~~~,我们需:加油~~~!!!

洛谷P5774,可爱的动态规划。的更多相关文章

  1. 洛谷P1280 && caioj 1085 动态规划入门(非常规DP9:尼克的任务)

    这道题我一直按照往常的思路想 f[i]为前i个任务的最大空暇时间 然后想不出来怎么做-- 后来看了题解 发现这里设的状态是时间,不是任务 自己思维还是太局限了,题做得太少. 很多网上题解都反着做,那么 ...

  2. 洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】

    题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,2 ...

  3. 洛谷P1136 迎接仪式 动态规划

    显然,这是一道动归题. 我们发现,每次交换时只可能交换不同的字母(交换同类字母显然是没有意义的).那么每次交换等同于将 111 个 "j""j""j& ...

  4. 洛谷P2196 && caioj 1415 动态规划6:挖地雷

    没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...

  5. 洛谷P1385 密令 题解 动态规划

    题目链接:https://www.luogu.com.cn/problem/P1385 题目大意: 给定一小写字母串s,每次操作你可以选择一个p(1<=p<|s|)执行下述修改中的任意一个 ...

  6. 洛谷 CF1012C Hills (动态规划)

    题目大意:有n个山丘 , 可以在山丘上建房子 , 建房子的要求是 : 该山丘的左右山丘严格的矮于该山丘 (如果有的话),你有一架挖掘机,每单位时间可以给一个山丘挖一个单位的高度,问你想要建造 1,2, ...

  7. 洛谷 CF1012C Hills(动态规划)

    题目大意: 有几座山,如果一座山左右两边的山比它矮,那么可以在这个山上建房子,你有一台挖掘机,每天可以挖一座山一米,问你需要花多少代价可以分别盖1.2.3--座房子.(给出山的数量,以及每座山的高度) ...

  8. 【洛谷P4933 大师】动态规划

    题目描述 ljt12138首先建了n个特斯拉电磁塔,这些电塔排成一排,从左到右依次标号为1到n,第i个电塔的高度为h[i]. 建筑大师需要从中选出一些电塔,然后这些电塔就会缩到地下去.这时候,如果留在 ...

  9. 洛谷教主花园dp

    洛谷-教主的花园-动态规划   题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...

随机推荐

  1. (易忘篇)java基本语法难点3

    本博客随笔主要记录本人学习过程中的知识,欢迎大家一同学习,有不对的地方很高兴读者能详细指出,感激不尽! JVM内存结构 编译完源程序以后,生成一个或多个字节码文件. 我们使用JVM中的类的加载器和解释 ...

  2. iOS-字典转模型(单模型)的实现

    用模型取代字典的好处 使用字典的坏处 一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲, eg:dict[@"name&quo ...

  3. mybatis源码解析-日志适配器

    1.为什么需要使用适配器?    集成第三方日志组件,屏蔽日志组件底层实现,统一提供写日志的接口. 2.什么是适配器模式 定义:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...

  4. org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate——解决方案汇总

    近期将自己本地的 maven 仓库进行了迁移,idea 的版本也升级到了IntelliJ IDEA 2019.3.3 x64,但是遇到了 Plugins 报红的情况,尝试很多方法,终于解决,现在做一下 ...

  5. 3.vue计算属性

    1.计算属性  再vue中如果出现表达式过长或者逻辑比较复杂,这时会导致代码不清晰,臃肿,难以维护所以我们会使用计算属性进行书写  再计算属性中可以放负责的逻辑,可以是函数,表达式等,但最终会返回一个 ...

  6. 如何通过PR给视频添加字幕?

    第一步:将视频通过导出音频格式MP3 第二步:将音频MP3导入网易见外平台 第三步:在网易见外平台创建项目,进行语音转写如下所示: 第四步:将从网易见外平台到处的srt字母文件,打开后进行编码为utf ...

  7. SpringMVC中的@RequestMapping注解

    @RequestMapping:设置请求映射,把请求和控制层中的方法设置映射关系 属性: 当请求路径和@RequestMapping的value属性一致时,则该注解所标注的方法即为处理请求的方法 me ...

  8. 深度学习中环境配置的一些经验总结(conda 常用命令)

    前两个月参加了学校的国创项目,和一个外院的同学组队.课题是基于深度学习的新闻图片中网络暴力元素的检查. 6月末最后一门试考完,正式开始暑假,便有了大把时间搞这个国创项目(反正没有其他事干).两个组凑钱 ...

  9. npm设置为淘宝镜像地址

    1. npm设置为淘宝镜像 $npm config set registry https://registry.npm.taobao.org 2. 检查一下 $npm config get regis ...

  10. 迷你图书管理系统 源代码 Java初级小项目

    今天博主再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码) ...