珂...珂...珂朵莉给你出了一道送分题:

给你一个长为n的序列{vi},和一个数a,你可以从里面选出最多m个数

一个合法的选择的分数定义为选中的这些数的和加上额外规则的加分:

有b个额外的规则,第i个规则即为:

对于这个序列的所有长为a的连续子区间,如果这个子区间中对应的给出的xi个位置都被选中了,则这次选择的分数加上yi(yi可能为负数,这种情况下分数仍然要加上y)

直接暴力枚举子集, 复杂度是$O(3^n+nm2^n)$.

#include <iostream>
#include <memset.h>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; const int N = 110, INF = 0xefefefef;
int n,m,a,b;
int v[N], f[1<<16], dp[2][55][1<<16], c[1<<16];
void chkmax(int &a, int b) {a<b?a=b:0;} int main() {
scanf("%d%d%d%d", &n, &m, &a, &b);
a = min(a, n);
REP(i,1,n) scanf("%d", v+i);
REP(i,1,b) {
int x, y, s = 0, t, mx = 0;
scanf("%d%d",&x,&y);
while (x--) {
scanf("%d", &t);
s ^= 1<<t-1;
}
f[s] += y;
}
memset(dp,INF,sizeof dp);
int mx = (1<<a)-1, cur = 0;
REP(i,0,mx) {
int &s = dp[cur][__builtin_popcount(i)][i] = 0;
for (int j=i; j; --j&=i) s += f[j];
REP(j,0,a-1) if (i>>j&1) s += v[j+1];
}
memset(c,0xef,sizeof c);
REP(i,2,n-a+1) {
cur ^= 1;
memset(dp[cur],INF,sizeof dp[cur]);
REP(j,0,m) REP(k,0,mx) if (dp[!cur][j][k]!=INF) {
int &r = dp[!cur][j][k];
int nxt = k>>1^1<<a-1;
if (c[nxt]==INF) {
c[nxt] = 0;
for (int x=nxt; x; --x&=nxt) c[nxt] += f[x];
}
chkmax(dp[cur][j+1][nxt],r+v[i+a-1]+c[nxt]);
nxt = k>>1;
if (c[nxt]==INF) {
c[nxt] = 0;
for (int x=nxt; x; --x&=nxt) c[nxt] += f[x];
}
chkmax(dp[cur][j][nxt],r+c[nxt]);
}
}
int ans = 0;
REP(i,0,m) REP(j,0,mx) chkmax(ans,dp[cur][i][j]);
printf("%d\n", ans);
}

牛客 26E 珂学送分2 (状压dp)的更多相关文章

  1. 牛客网 珂学送分( 期望DP )

    题意 : 题目链接 分析 : 听队友说一般概率从前往后推.期望从后往前推......... #include<bits/stdc++.h> using namespace std; ; d ...

  2. codevs2800送外卖(floyd+状压dp)

    2800 送外卖  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东 ...

  3. loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd

    LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...

  4. 牛客多校3 A-PACM Team(状压降维+路径背包)

    PACM Team 链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...

  5. 【wikioi】2800 送外卖(状压dp+floyd)

    http://www.wikioi.com/problem/2800/ 本题状压莫名其妙的tle了,(按照hzwer大神打的喂,他1000多ms,我就2000ms了?) (14.8.7更,将getnu ...

  6. codevs 2800 送外卖(状压dp)

    /* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...

  7. 牛客练习赛53 D 德育分博弈政治课 (思维建图,最大流)

    牛客练习赛53 D德育分博弈政治课 链接:https://ac.nowcoder.com/acm/contest/1114/D来源:牛客网 题目描述 德育分学长最近玩起了骰子.他玩的骰子不同,他的骰子 ...

  8. 牛客比赛-状压dp

    链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意 ...

  9. 牛客练习赛49 B 筱玛爱阅读 (状压DP,子集生成)

    链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言5257 ...

随机推荐

  1. Reconnect due to socket error java.nio.channels.ClosedChannelException

    storm整合kafka后出现如下异常: 错误原因:有部分kafka服务器连接不上导致,检查一下是不是每个kafka都能连接到(有的kafka配置使用的是host,记得配置相同的环境) 造成异常代码段 ...

  2. ROS Topic 常用指令

    rostopic list rosnode list一樣,就是列出目前運行中的topic有哪些. rostopic echo <topic_name> 接下來這個指令比較重要啦,就是去監聽 ...

  3. spaCy 第二篇:语言模型

    spaCy处理文本的过程是模块化的,当调用nlp处理文本时,spaCy首先将文本标记化以生成Doc对象,然后,依次在几个不同的组件中处理Doc,这也称为处理管道.语言模型默认的处理管道依次是:tagg ...

  4. Antecedent Membership Functions相关资料

    属于模糊控制领域 前件隶属函数(Antecedent Membership Functions) 基于模糊近似的强化学习方法研究 - 豆丁网 https://www.docin.com/p-13022 ...

  5. LC 983. Minimum Cost For Tickets

    In a country popular for train travel, you have planned some train travelling one year in advance.  ...

  6. Activiti数据库支持

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...

  7. [Java复习] Spring Boot

    什么是Spring Boot? 传统SSH/SSM框架配置繁琐,有很多重复的模板配置,效率不高. Spring Boot快速创建可独立运行,生产级别的Spring应用程序. 主要是基于Spring家族 ...

  8. PS改变图片像素大小(一寸照片变二寸)

    1.打开Photoshop,点击“文件”菜单,选择“打开”,将要处理的图片加载进来 2.找到“图像”菜单,选择“图像大小”,我们在这里对图片进行处理. 3.根据需要对其分辨率或者尺寸进行设置,设置好后 ...

  9. Qt编写安防视频监控系统9-自动隐藏光标

    一.前言 这个效果的灵感来自于大屏电子看板系统,在很多系统中尤其是上了大屏的时候,其实在用户不在操作的时候,是很不希望看到那个鼠标箭头指针的,只有当用户操作的时候才显示出来,这个就需要开个定时器定时计 ...

  10. MySQL truncate()函数的使用说明

    1.TRUNCATE()函数介绍 TRUNCATE(X,D) 是MySQL自带的一个系统函数. 其中,X是数值,D是保留小数的位数. 其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进 ...