「Vijos 1283」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔杖
佳佳的魔杖
背景
配制成功了珍贵的0号药水,MM的病治好了。轻松下来的佳佳意外的得到了一个好东西……那就是——一种非常珍贵的树枝。这些树枝可以用来做优质的魔杖!当然了,不能只做自己的,至少还要考虑到MM的对吧。选择怎样的切割方式来制作魔杖非常重要,关键问题是——一把魔杖既不能太长、又不能太短,且制作出来的魔杖不能有冲突……
描述
佳佳得到的这些树枝在属性上完全相同。每一个树枝都有n段(用1~n编号),给定了每段的长度L[i]和每段的魔力值M[i]。单独的一段是不可以从中间切开的,你可以做的就是选择一段或连续的几段,把它们作为一个整体切下来,再用来制作魔杖。但是一根魔杖的长度不能太长——不能大于给定的值hi;也不能太短——不能小于给定的值lo。
魔杖有一个奇怪的要求:如果某一根魔杖的制作材料是另一根魔杖的一部分,则这两根魔杖之间将发生冲突。比如说树枝有三段,从左到右的长度分别为4、 1、3,佳佳需要长度为4到5之间的魔杖。佳佳可以用一根树枝的前两段做出一个长度为5的魔杖,用一根树枝的后两段做出长度为4的魔杖;但他决不能用一根树枝的前两段做了魔杖后再单独使用另一根树枝的第一段做成魔杖,因为前者包含了后者的所有成分,这会导致冲突。
我们假设佳佳可以得到任意多这样的树枝。佳佳需要制作出若干个互不冲突的魔杖,使所有魔杖的魔力值之和最大。(魔杖的长度就是组成它的那些段的长度的总和,魔力值亦然)。
输入格式
第一行有三个用空格隔开的正整数,分别表示n、lo、hi。
第二行的n个用空格隔开的正整数就是L[1]、L[2]……L[n]。
第三行的n个用空格隔开的正整数就是M[1]、M[2]……M[n]。
输入文件以一个回车/换行符结尾。
输出格式
只用输出一个整数,表示能够获得的魔力值的最大值。
样例1
样例输入1
6 4 5
1 3 3 2 2 1
2 3 1 4 5 2
样例输出1
21
限制
1秒
提示
取\([1 3] [3 2] [2 2 1]\)做成魔杖。
得到最大权值\(2+3+1+4+4+5+2=21\)。
对于30%的数据,\(n\le10\);
对于50%的数据,\(n\le100\);
对于100%的数据,\(n<=1000,l_o\le h_i \le 2^{31}-1,L_i,M_i \le 100 000\)
来源
matrix67
思路
这是DP题,\(f[i][j]\) 表示左端点不超过i且右端点不超过j的最优方案。
很明显转移方程之一是\(f[i][j] = max( f[i - 1][j], f[i][j - 1] );\)
还有如果长度满足,可以\(f[i][j] = max( f[i][j], f[i - 1][j - 1] + 得到魔力值 );\)
话不多说,上代码——
代码
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1005
#define LL long long
int n, lo, hi;
LL L[MAXN], M[MAXN];
LL f[MAXN][MAXN];
int main(){
scanf( "%d%d%d", &n, &lo, &hi );
for ( int i = 1; i <= n; ++i ) scanf( "%lld", &L[i] ), L[i] += L[i - 1];
for ( int i = 1; i <= n; ++i ) scanf( "%lld", &M[i] ), M[i] += M[i - 1];
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= i; ++j ){
f[i][j] = max( f[i - 1][j], f[i][j - 1] );
if ( L[i] - L[j - 1] >= lo && L[i] - L[j - 1] <= hi ) f[i][j] = max( f[i][j], f[i - 1][j - 1] + M[i] - M[j - 1] );
}
printf( "%lld", f[n][n] );
return 0;
}
「Vijos 1283」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔杖的更多相关文章
- 「Vijos 1282」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法照片
佳佳的魔法照片 背景 佳佳的魔法照片(Magic Photo):如果你看过<哈利·波特>,你就会知道魔法世界里的照片是很神奇的.也许是因为小魔法师佳佳长的太帅,很多人都找他要那种神奇的魔法 ...
- 「Vijos 1285」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法药水
佳佳的魔法药水 背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水--怎么样才能得到0号药水呢?你要知道佳佳的家境也 ...
- 「Vijos 1284」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法阵
佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放-- 描述 魔法阵是一个\(n ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...
- #10470. 「2020-10-02 提高模拟赛」流水线 (line)
题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...
- 「CSP-S模拟赛」2019第三场
目录 T1 「POI2007」山峰和山谷 Ridges and Valleys 题目 考场思路(几近正解) 正解 T2 「JOI 2013 Final」 现代豪宅 题目 考场思路(正解) T3 「SC ...
- 「CSP-S模拟赛」2019第二场
目录 T1 Jam的计数法 题目 考场思路(正解) T2 「TJOI / HEOI2016」排序 题目 考场思路(假正解) 正解 T3 「THUWC 2017」随机二分图 题目 考场思路 正解 这场考 ...
- 「CSP-S模拟赛」2019第一场
目录 T1 小奇取石子 题目 考场思路 正解 T2 「CCO 2017」专业网络 题目 考场思路 题解 T3 「ZJOI2017」线段树 题目 考场思路 正解 这场考试感觉很奇怪. \(T1.T2\) ...
随机推荐
- 支付宝防并发方案之"一锁二判三更新"
每年支付宝在双11和双12的活动中,都展示了绝佳的技术能力.这个能力不但体现在处理高TPS量的访问,更体现在几乎不会出错,不会出现重复支付的情况,那这个是怎么做到的呢? 诚然,为了实现在高并发下仍不会 ...
- 使用属性position:fixed的时候如何才能让div居中
css: .aa{ position: fixed; top: 200px; left: 0px; right: 0px; width: 200px; height: 200px; margin-le ...
- H3C PPP基本概念
- CF351E Jeff and Permutation
CF351E Jeff and Permutation 贪心好题 考虑每个对能否最小化贡献和 先不考虑绝对值相同情况 发现,对于a,b假设|a|<|b|,那么有无贡献只和b的正负有关!如果a在b ...
- 第一种方式:cookie的优化与购物车实例
一 Cookie 的优化 1.1 一般而言,我们设置cookie是在php中设置 例如: <?php setcookie('testKey1','hello world',0,'/'); //# ...
- H3C RIP路由表的初始化
- java 声明多个泛型类型和通配符
若一个类中多个字段需要不同的泛型声明,则在声明类的时候指定多个泛型类型即可: 格式: public interface IDAO<PK, T> { PK add(T t); void re ...
- P1013 高精度加法
题目描述 给你两个很大的正整数A和B,你需要计算他们的和. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^5\)) 输出格式 输出一行包含一个整数,表示A+B ...
- 用nodejs创建服务器显示html页面
nodejs版本:v10.14.2 1.首先准备一个简单的html页面 <!DOCTYPE html> <html lang="en"> <head& ...
- Linux 内核/sbin/hotplug 工具
如同本章中前面提过的, 无论何时一个设备从系统中增删, 都产生一个"热插拔事件". 这 意味着内核调用用户空间程序 /sbin/hotplug. 这个程序典型地是一个非常小的 ba ...