牛客 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 ...
随机推荐
- android: Android 权限管理小结
一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...
- SQL-W3School-高级:SQL 数据类型
ylbtech-SQL-W3School-高级:SQL 数据类型 1.返回顶部 1. Microsoft Access.MySQL 以及 SQL Server 所使用的数据类型和范围. Microso ...
- jeecg中获取用户拥有的角色的数据权限
String roles1=""; String sql=""; //1.获取用户 TSUser user = ResourceUtil.getSessionU ...
- 5.性能测试工具比较:Jmeter和LR
性能测试工具较多,无法一一进行介绍,感兴趣者可自行搜索资料学习.需要说明的是工具使用方法和原理都大同小异,掌握一个,其他皆可快速上手. 下面就以服务端的性能测试工具为例,对市场上最常用,知名度较高,也 ...
- Git Command之Code Review
原文链接 准备 Step 1. Create a team and add a teammate Step 2. Create a repository with some content 应用 Cl ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_02-freemarker介绍
- MySQL连接错误:Can't connect to MySQL server on'localhost' (10055)
在Windows服务器上确认服务器和mysql都是正常运行,但就是连接不上.搜了一下别人的解决方案, 参考这篇https://blog.csdn.net/langren697/article/deta ...
- C#创建windows服务(二:创建和卸载windows服务)
引用地址: https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-create-windows-servi ...
- C# 实现启用或停止本地网络连接
获取本机网络连接列表 public static List<string> GetNetList() { List<string> ls = new List<strin ...
- Unity3d 烘培lightingmap 注意的2点.
1.在Qulity里面设置合适的灯光数量.否则,你会发现烘培出来的场景,有些灯光没有起作用. 2.在导入模型时候,注意勾选:Generate Lightingmap . 否则,模型没办法烘培. 3. ...