201.09.22 除虫药水(线性dp)
描述
在十年前,除虫是十分艰苦的工作。那时,使用普通药水进行除虫的效果极差,在一片苹果 林中使用后除掉的虫仅为极小一部分。
比如说,Bugs 镇共有 N 片苹果林,对第i 片使用普通药水可以除掉 ai 吨虫。xxx的任务是对这 N 片苹果林中的每一片进行除虫,并且他必 须按照 1 到 N 的顺序依次处理。 xxx另有一种高级药水,其除虫能力为普通药水的 K 倍, 也就是说,在第i 片苹果林中使用高级药水可以除掉 Kai 吨虫。但是,高级药水是极为珍贵 的,xxx 仅有 M 瓶。并且,由于其挥发性极强,每瓶高级药水都必须在至多 L 片连续的 苹果林中使用。现在 xxx 想知道他最多能杀多少吨虫。
输入
第一行四个整数 N, M , K, L 。
第二行 N 个整数,为 ai 。
输出
输出一行一个整数表示答案。
样例输入
5 5 5 5
1 2 3 4 5
样例输出
75
提示
对于 20%的数据, N <=10 。
对于 100%的数据,1<=N, M , L<=1000,1< K< 100,0 <= ai <=1000。
一道挺有意思的dp。
主要是要用当前的状态推未来的(不然最后L个数要凉)。
代码:
#include<bits/stdc++.h>
#define N 1005
using namespace std;
inline short read(){
short ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
short n,m,l,k;
int f[N][N],a[N],sum[N];
inline int max(const int&a,const int&b){return a>b?a:b;}
inline short min(const short&a,const short&b){return a<b?a:b;}
int main(){
n=read(),m=read(),k=read(),l=read();
for(register short i=1;i<=n;++i)sum[i]=sum[i-1]+k*(a[i]=read());
for(register short j=0;j<=m;++j)
for(register short i=0;i<n;++i){
f[i+1][j]=max(f[i+1][j],f[i][j]+a[i+1]);
short tmp=min(n,i+l);
f[tmp][j+1]=max(f[tmp][j+1],f[i][j]+sum[tmp]-sum[i]);
}
cout<<f[n][m];
return 0;
}
201.09.22 除虫药水(线性dp)的更多相关文章
- 2018.09.21 codeforces1051D. Bicolorings(线性dp)
传送门 sb线性DP. f[i][j][0/1/2/3]f[i][j][0/1/2/3]f[i][j][0/1/2/3]表示前i列j个连通块且第i列状态为00/01/10/11时的方案总数. 这个显然 ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
- 线性DP总结(studying
写在前面 虽然都说线性DP是入门,但我还是今天才开始学 线性DP就是珂以通过线性处理得出答案的一种DP 每一种状态都可以从前面推得,并且推导过程是呈线性的 参考题单(本人现在主要用luogu,所以这些 ...
- 最长子序列(线性DP)学习笔记
子序列和子串不一样.子串要求必须连续,而子序列不需要连续. 比如说\(\{a_1,a_2\dots a_n\}\),他的子串就是\(\{a_i,a_{i+1},\dots, a_j|1\leq i\l ...
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
- hdu1712 线性dp
//Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...
- 动态规划——线性dp
我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
随机推荐
- DDoS攻防战 (一) : 概述
岁寒 然后知松柏之后凋也 ——论语·子罕 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生) DDoS,即 Distributed Denial of Servi ...
- 将 MyBatis3 的支持添加到 Spring
http://www.mybatis.org/spring/zh/index.html What is MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无 ...
- J2SE 8的反射
1.获得Class的四种方式 //(1) 利用对象调用getClass()方法获取该对象的Class实例 Class<? extends ReflectTest> class1 = new ...
- VB6 如何创建一个标准控制台程序
打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...
- 7 python 模块间相互导入
python在不同层级目录import模块的方法 注意,在python3里,即使目录下没__int__.py文件也能创建成功,猜应该是解释器优化所致,但创建包还是要记得加上这个文件 吧. 1.模块的分 ...
- 一步步实现 easyui datagrid表格宽度自适应,效果非常好
一步步实现 easyui datagrid表格宽度自适应,效果非常好: 一.设置公共方法,使得datagrid的属性 fitColumns:true $(function(){ //初始加载,表格宽 ...
- MySql重复查询
MYSQL查询重复记录的方法很多,下面就为您介绍几种最常用的MYSQL查询重复记录的方法,希望对您学习MYSQL查询重复记录方面能有所帮助. 1.查找表中多余的重复记录,重复记录是根据单个字段(peo ...
- 判断一个对象是否为真 __nonzero__ 方法和 __len__方法
class A(): def __nonzero__(self): # 判断 一个对象是否为空,先查看该方法的返回值 return 1 def __len__(self): # 如果没有上一个方法,那 ...
- nginx配置【转】
转自:http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...
- whlie and for
public class TestWhileAndFor { /**测试 while和for循环练习 * 100 以内的奇数和偶数的和 * @author Administrator * */ pub ...