noip模拟赛 时之终末
题目背景
圣乔治:不用拘泥,剩下的时间已不多……
圣乔治:直呼我的真名——
丝佩碧雅:圣乔治大人
圣乔治:如今,已无法维持结界,或是抑制深渊的前进
圣乔治:既然如此,我将献上这副身躯,期望最后的战斗
圣乔治:已经——应该没有再和我多需说明的话语了
圣乔治:我也明白,我和其他4人都一样,是没有内在的傀儡——只不过是曾经存在的幻影罢了……
圣乔治:我本就是,身体被禁忌之龙的诅咒吞噬殆尽,几乎半生不死的状态……
圣乔治:曾经那个被称作虹之圣乔治的男人已经死了
圣乔治:我除了消灭虚无的碎片,消灭那个魔女以外,已别无他望……
丝佩碧雅:我曾经爱过你,圣乔治大人——
美玲:快走,她由我来挡住!
美玲:你们快去打倒虹之圣乔治和莉泽洛特!
我的脊髓与头被一分为二——
跌入黑暗的那一刹那——
我,呼唤着,他的名字——
圣乔治……大人……
为了朋友和明天——
我们是同伴……我这样相信着
因为是同伴……所以相信你……
题目描述
吊打集训队的zcy
给你出了一道题:
给你一个长为n的序列v,你可以从里面选出最多m个数
有一个数a,以及b个规则,每个规则即为:
对于这个序列的所有长为a的连续子区间,
如果这个子区间中对应的给出的x个位置都被选中了,
则这次选择的分数加上y(y可能为负数,这种情况下分数仍然要加上y)
输入输出格式
输入格式:
第一行四个数n,m,a,b
之后一行n个数表示序列v
之后输入b个规则
每个规则先输入两个数x和y,x != 0
之后一行x个数,分别表示这给定的x个位置
输出格式:
一行一个数表示最大可能得到的分数
输入输出样例
- 5 3 3 1
- 2 3 3 3 3
- 2 233
- 1 3
- 474
- 5 3 3 1
- 111 222 333 444 555
- 2 52
- 1 3
- 1384
- 6 3 3 2
- 1 2 3 3 4 1
- 2 1
- 1 2
- 2 2
- 2 3
- 16
说明
样例#4,#5,#6见下发的文件
【子任务】
子任务会给出部分测试数据的特点。
如果你在解决题目中遇到了困难, 可以尝试只解决一部分测试数据。
每个测试点的数据规模及特点如下表:
测试点编号 | n的范围 | m的范围 | a的范围 | b的范围 |
---|---|---|---|---|
测试点1 | n <= 20 | m <= 20 | a <= 10 | b <= 5 |
测试点2 | n <= 20 | m <= 20 | a <= 10 | b <= 5 |
测试点3 | n <= 40 | m <= 40 | a <= 10 | b <= 100000 |
测试点4 | n <= 40 | m <= 40 | a <= 10 | b <= 100000 |
测试点5 | n <= 100 | m <= 50 | a <= 10 | b = 0 |
测试点6 | n <= 100 | m <= 50 | a <= 10 | b = 0 |
测试点7 | n <= 100 | m <= 50 | a <= 10 | b <= 100000 |
测试点8 | n <= 100 | m <= 50 | a <= 10 | b <= 100000 |
测试点9 | n <= 100 | m <= 50 | a <= 16 | b <= 100000 |
测试点10 | n <= 100 | m <= 50 | a <= 16 | b <= 100000 |
对于100%的数据,n <= 100 , m <= 50 ,a <= 16 , b <= 100000 , 序列中每个值以及每条规则带来的加分的绝对值 <= 100
【说明】
【样例1说明】
【样例2说明】
【样例3说明】
分析:一开始想着贪心,但是贪不出来.仔细观察题目就会发现,这其实就是状压dp.因为a <= 16,我们可以状压a.先预处理出每个状态的贡献值.设f[i][j][k]为前i个数中选了j个末尾a个的状态为k的分数,枚举i-1位置上末尾a个的状态s,那么当前如果不考虑第i位的状态t就是(s << 1) & ((1 << a) - 1).如果第i位不选,那么f[i][j][t] = max{f[i][j][t],f[i - 1][j][s] + p[t]},p是预处理出的每个状态的贡献值,如果第i位要选,那么f[i][j][t | 1] = max{f[i][j][t | 1],f[i-1][j-1][s] + v[i] + p[t | 1]}
因为i是从i-1转移过来的,所以可以用滚动数组优化一下.
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int n, m, a, b, v[], c[( << ) + ], p[( << ) + ];
- int f[][( << ) + ], now, last, ans, g[][( << ) + ];
- int main()
- {
- scanf("%d%d%d%d", &n, &m, &a, &b);
- for (int i = ; i <= n; i++)
- scanf("%d", &v[i]);
- for (int i = ; i <= b; i++)
- {
- int x, y, stu = ;
- scanf("%d%d", &x, &y);
- while (x--)
- {
- int t;
- scanf("%d", &t);
- stu |= << (a - t);
- }
- c[stu] += y;
- }
- for (int i = ; i < ( << a); i++)
- for (int j = i; j; j = (j - ) & i)
- p[i] += c[j];
- memset(f, -0x3f, sizeof(f));
- memset(g, -0x3f, sizeof(g));
- f[][] = ;
- int zhuangtai = ( << a) - ;
- for (int i = ; i <= n; i++, swap(f, g), memset(g, -0x3f, sizeof(g)))
- for (int j = ; j <= min(m, i); j++)
- for (int s = ; s <= zhuangtai; s++)
- if (f[j][s] != -)
- {
- int t = (s << ) & zhuangtai;
- g[j][t] = max(g[j][t], f[j][s] + (i >= a ? p[t] : ));
- g[j + ][t | ] = max(g[j + ][t | ], f[j][s] + v[i] + (i >= a ? p[t | ] : ));
- }
- for (int i = ; i <= m; i++)
- for (int j = ; j < ( << a); j++)
- ans = max(ans, f[i][j]);
- printf("%d\n", ans);
- return ;
- }
noip模拟赛 时之终末的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- Nescafe #29 NOIP模拟赛
Nescafe #29 NOIP模拟赛 不知道这种题发出来算不算侵权...毕竟有的题在$bz$上是权限题,但是在$vijos$似乎又有原题...如果这算是侵权的话请联系我,我会尽快删除,谢谢~ 今天开 ...
随机推荐
- nova service-list for juno kilo,liberty openstack
- sql 语句NVL()用法
一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的 ...
- PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法
一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...
- E20170628-hm
forgery n. 伪造; 伪造罪; 伪造物; 伪造签字; distribute vt. 分配,散布; 散发,分发; 把…分类; [电] 配电; contribute to(contribu ...
- activiti安装-------安装插件
对上面的放大
- [Swift通天遁地]四、网络和线程-(3)线程组:使用DispatchGroup(调度组)对线程进行分组管理
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- DFS知识点
2019-06-01 11:14:34 加油,坚持!!! 1. 2. 3.
- 去掉myeclipse的预览窗口
1,选择菜单: windows -> preferences2,在弹出窗口中选择General-> Editors -> FileAssociations3,在上方框内选择*.jsp ...
- [ BZOJ 3038 & 3211 / SPOJ GSS4 ] 上帝造题七分钟2 / 花神游历各国
\(\\\) \(Description\) 给出一个长度为\(N\)的数列,共进行\(M\)次操作: \(1\ L\ R\):查询\([L,R]\)区间和. \(2\ L\ R\):对\([L,R] ...
- android黑科技系列——获取加固后应用App的所有方法信息
一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这 ...