魔法禁书目录2:回家(codevs 3024)
大妈打完三战回家,我知道他是怎么回来的,欧洲到日本有L个站点他决定乘坐恰好n次飞机(不是学院都市的超音速飞机)和m次火车来从第一个站点到达最后一个站点。但是有一点很重要的就是跟御坂美琴那样的壕不同大妈很穷,所以他决定要尽量花费最少的费用,当然如果能赚到钱那就更好了。由于当麻交友甚广,他们在某些站点可以见到一些故友,可以得到资助,而在有些站点不但不会赚钱,还会因为要住宿,买车票,旅游等而花费一定的费用。如果他乘坐火车,那么就会受到所经过的站点(包括终点不包括起点)的影响,花费一定费用或赚到一定的钱,而他做飞机的话就不会受到站点的影响,他已经知道了每个站点的情况,为防止钱花的过多被index咬头他决定找你来帮他找到最省钱(赚钱)的方案
输入文件back.in第一行包含三个整数,为他们决定坐火车的次数m,他们决定坐飞机的次数n,站点数L。第二行为L个整数,每个数都在-200到200之间,表示每个站点的情况,正数表示能赚到钱,负数表示会花费钱。
输出文件back.out包含一个整数,表示他们最多能赚到多少钱(如果入不敷出就输出负数来表示他们花了多少钱)。
6 6 14
12 32 43 -1 32 -9 -10 32 -43 -21 -32 12 -31 -3
150
【样例解释】
一种最赚钱的方法为:1-〉2(火车),2-〉3(火车),3-〉4(火车),4-〉5(火车),5-〉7(飞机),7-〉8(火车),8-〉9(飞机),9-〉10(飞机),10-〉11(飞机),11-〉12(火车),12-〉13(飞机),13-〉14(飞机)
【数据范围】
n+m<L
对于60%的数据,1<=n,m<=50,1<=L<=200。
对于100%的数据,1<=n,m<=200,1<=L<=500。
/*
DP方程式很好想的,设f[i][j][k]为用了i次火车,j次飞机,走到k点的最大收益。
转移:f[i][j][k]=max(f[i-1][j][pos]+s[k]-s[pos],f[i][j-1][pos])
但是这样时间和空间都会超,空间数组滚一下,至于时间,我们发现每次更新f[i][j][…]的都是f[i-1][j][…],
所以可以考虑维护一个最大值。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 210
#define M 60
using namespace std;
int a[N],s[N],f[][M][N],n,c1,c2,mx1[][M][N],mx2[][M][N];
int main(){
memset(f,-/,sizeof(f));
memset(mx1,-/,sizeof(mx1));
memset(mx2,-/,sizeof(mx2));
scanf("%d%d%d",&c1,&c2,&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
s[i]=s[i-]+a[i];
}
f[][][]=mx1[][][]=mx2[][][]=;
for(int i=;i<=c1;i++){
for(int j=;j<=c2;j++){
for(int k=;k<=n;k++){
if(i)f[i&][j][k]=max(f[i&][j][k],mx1[(i+)&][j][k-]+s[k]);
if(j)f[i&][j][k]=max(f[i&][j][k],mx2[i&][j-][k-]);
}
for(int k=;k<=n;k++){
mx1[i&][j][k]=max(mx1[i&][j][k-],f[i&][j][k]-s[k]);
mx2[i&][j][k]=max(mx2[i&][j][k-],f[i&][j][k]);
}
}
for(int j=;j<=c2;j++)
for(int k=;k<=n;k++){
f[i+&][j][k]=-;
mx1[i+&][j][k]=-;
mx2[i+&][j][k]=-;
}
}
printf("%d\n",f[c1&][c2][n]);
return ;
}
魔法禁书目录2:回家(codevs 3024)的更多相关文章
- [Nowcoder212D]禁书目录_概率期望
禁书目录 题目大意:清教需要定期给Index清除记忆,在此之前需要把当中的十万三千本禁书取出来......不幸的是,禁书一旦离开了Index就非常脆弱,具体来说,每一本禁书都有一个魔力值 ai ,其记 ...
- 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...
- T1079 回家 codevs
http://codevs.cn/problem/1079/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver~死坑 题目描述 Description 现在是晚 ...
- day-4
/* 早上黑板上的倒计时变成了120小时 嗯 很快就要结束了 上午考试 据老师说很简单 老师 :"我就说说~"..... 下午改题 T3好辣脑子 感觉智商不够了 T2dp写丑了 然 ...
- Front Page
General Team FST stay night from ShanDong University 19 - 20 CCPC QinHuangDao Gold (4 th) IUPC YinCh ...
- 【JAVA 文件概述】
一.概述 使用此类的原因: 该类将文件或者文件夹封装成对象.方便对文件与文件夹的属性信息进行操作.File对象作为参数传递给流的构造函数.要求:使用File类的常用方法. windows平台下,目录分 ...
- Qt Creator提示"Qt没有被正确安装,请运行make install"的解决办法
笔者最近使用Qt在开发一些小程序,觉得这个框架设计确实很好,使用了信号和槽解决了组件之间的通讯问题,可以说是基于C++语言上一个非常大的创新,大大提高了开发人员的编码效率,也使整个C++语言更加抽象. ...
- Atlas安装及配置
==============linux下快捷键==================ctrl+insert 复制shift +insert 粘贴 输入文件名的前三个字母,按tab键自动补全文件名 在vi ...
- Linux简单的常用命令——纯手打(慢慢积累)
==============linux下快捷键==================ctrl+insert 复制shift +insert 粘贴 输入文件名的前三个字母,按tab键自动补全文件名 在vi ...
随机推荐
- Mac Pro 使用 ll、la、l等ls的别名命令
在 Linux 下习惯使用 ll.la.l 等ls别名的童鞋到 mac os 可就郁闷了~~ 其实只要在用户目录下建立一个脚本“.bash_profile”, vim .bash_profile 并输 ...
- C\C++ 字符串的格式化与类型转化
字符串格式化 1.sscanf int sscanf(const char *buffer,const char *format,[argument ]...) 取到指定字符为止的字符串.如在下例中, ...
- 网络编程3-URL编程(URL)
1.URL(Uniform Resource Locatior) 统一资源占位符,表示Intenet上某一资源的地址 2.URL的组成部分 传输协议:主机名:端口号:文件名 例:http://192. ...
- 真有用?Snap和Flatpak 通吃所有发行版的打包方式。
导读 最近我们听到越来越多的有关于Ubuntu的Snap包和由Red Hat员工Alexander Larsson创造的 Flatpak (曾经叫做 xdg-app)的消息.这两种下一代打包方法在本质 ...
- 使用update!导致的更新时候的错误信息不显示 ruby on rails
在图片管理里添加了校验方法之后,发现在更新的时候页面不显示校验报错的信息 class Picture < ApplicationRecord belongs_to :imageable, pol ...
- [KOJ6023]合并果子·改
[COJ6023]合并果子·改 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多把这些果子堆排成一排,然后所有的果子合成一堆. 每一次合并,多多可以 ...
- 好无语的问题----include 后面需要空格么?
前俩天回学校办事,在去师弟宿舍的时候,被问到了一个很 "深奥"得问题 ---------include 后面需要空格么? 在我以前的印象中不管在哪个编译器中,,都是需要有空格的, ...
- Java WebClient 总结
private WebClient getAWebClient() { WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); ...
- hibernate日常BUG总结
在使用hibernate自动生产表的时候失败, 是配置文件我是从别地方拷贝过来忘记更改,所以报了这个错误. 重新命名了生成表的名称,问题解决! 问题很明显,自动增长的主键应该使用整型. 这里写的是St ...
- EXTJS 动态改变Gird 列值
var me = this.getView('EditProProductQrcodePanel'); var grid = me.down("[name=mallQrcodeGrid] ...