牛客 26E 珂学送分2 (状压dp)
珂...珂...珂朵莉给你出了一道送分题:
给你一个长为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)的更多相关文章
- 牛客网 珂学送分( 期望DP )
题意 : 题目链接 分析 : 听队友说一般概率从前往后推.期望从后往前推......... #include<bits/stdc++.h> using namespace std; ; d ...
- codevs2800送外卖(floyd+状压dp)
2800 送外卖 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东 ...
- loj #6177. 「美团 CodeM 初赛 Round B」送外卖2 状压dp floyd
LINK:#6177.美团 送外卖2 一道比较传统的状压dp题目. 完成任务 需要知道自己在哪 已经完成的任务集合 自己已经接到的任务集合. 考虑这个dp记录什么 由于存在时间的限制 考虑记录最短时间 ...
- 牛客多校3 A-PACM Team(状压降维+路径背包)
PACM Team 链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...
- 【wikioi】2800 送外卖(状压dp+floyd)
http://www.wikioi.com/problem/2800/ 本题状压莫名其妙的tle了,(按照hzwer大神打的喂,他1000多ms,我就2000ms了?) (14.8.7更,将getnu ...
- codevs 2800 送外卖(状压dp)
/* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...
- 牛客练习赛53 D 德育分博弈政治课 (思维建图,最大流)
牛客练习赛53 D德育分博弈政治课 链接:https://ac.nowcoder.com/acm/contest/1114/D来源:牛客网 题目描述 德育分学长最近玩起了骰子.他玩的骰子不同,他的骰子 ...
- 牛客比赛-状压dp
链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意 ...
- 牛客练习赛49 B 筱玛爱阅读 (状压DP,子集生成)
链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言5257 ...
随机推荐
- linux查看服务安装目录redis
如果用命令 which redis 或者 whereis redis 都找不到安装目录, 可使用以下办法: ps -aux | grep redis 或者ps -ef|grep redis 假如得到 ...
- combobox的js添加数据
$("#int_cls").combobox({ valueField:'code', textField:'name', disabled:false }); var data, ...
- python中的匿名函数
python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda的主体是一 ...
- elasticsearch _update api 更新部分字段内容
https://www.elastic.co/guide/cn/elasticsearch/guide/current/partial-updates.htmlupdate 请求最简单的一种形式是接收 ...
- ROS Topic 常用指令
rostopic list rosnode list一樣,就是列出目前運行中的topic有哪些. rostopic echo <topic_name> 接下來這個指令比較重要啦,就是去監聽 ...
- Python语法 - 生成器
生成器基本概念 1 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束 2 生成器表达式能做的事情列表解析基本都能处理,只不 ...
- Linux发行版的选择
1,需要稳定的服务器,选择CentOS 或 RHEL 2,需要自己定制的桌面系统,选择Ubuntu 3,摸索linux 各方面的知识,选择Gentoo 4,需要稳定性高的系统,选择FreeBSD 5, ...
- ios 自动去重
//resultArrM 数据原//_indexArray 过滤后的数据//MYSelectAreaModel 模型 /* 重定义索引 */ - (void)sy_indexArray{ /* 索 ...
- failOnMissingWebXml
使用maven创建项目时有时在pom.xml的war处出现failOnMissingWebXml的错误,根据错误提示的原因可以知道项目是web项目,打包时打成war包. 如果项目里没有web.xml, ...
- scikit-learn机器学习(四)使用决策树做分类
我们使用决策树来创建一个能屏蔽网页横幅广告的软件. 已知图片的数据判断它属于广告还是文章内容. 数据来自 http://archive.ics.uci.edu/ml/datasets/Internet ...