Codeforces 题目传送门 & 洛谷题目传送门

当被数据结构搞自闭的 tzc 信心满满地点开一道 *2400 的 dp 题时……

却发现自己不会做?!

这足以证明蒟蒻 dp 之菜/dk/dk/wq/wq

设 \(a_i=[\text{第一个人会做第}\ i\ \text{题}]\),\(b_i=[\text{第二个人会做第}\ i\ \text{题}]\)

考虑 \(dp\),\(dp_{i,j,x,y}\) 表示现在已经考虑到了第 \(i\) 个人,现在已经消耗了 \(j\) 次偷看的机会,此次向左边的人的偷看机会已经向左边的人偷看 \(x\) 题,此次向左边的人的偷看机会已经向左边的人偷看 \(y\) 题,所能做出的最多题数。如果 \(x=k\) 表示在不消耗新的偷看机会的情况下不能再偷看第一个人的试卷,\(y=k\) 也同理。

分两种情况转移:

  1. 不消耗新的偷看机会,即从 \(dp[i][j][x][y]\) 转移到 \(dp[i+1][j][\min(x+1,k)][\min(y+1,k)]\),此时能多做出一道题当且仅当 \((a_{i+1}\land x+1\leq k)\lor (b_{i+1}\land y+1\leq k)\),即 \(dp[i+1][j][\min(x+1,k)][\min(y+1,k)]\leftarrow dp[i][j][x][y]+(a_{i+1}\land x+1\leq k)\lor (b_{i+1}\land y+1\leq k)\)

  2. 消耗新的偷看机会。还是分两种情况,一是偷看第一个人的试卷,即 \(dp[i+1][j+1][1][\min(y+1,k)]\leftarrow dp[i][j][x][y]+a[i+1]\),第二种是偷看右边人的试卷,即 \(dp[i+1][j+1][\min(x+1,k)][1]\leftarrow dp[i][j][x][y]+b[i+1]\)。

最终答案即为 \(\max dp[n][j][x][y]\)。

这样 DP 时间复杂度为 \(npk^2\),会炸。考虑优化,感性理解一下可知当 \(p\) 比较大的时可以选择将两个人的每道题的答案看完,这样答案即为 \(a_i\lor b_i=1\) 的 \(i\) 的个数。随便算一下就知道这样的 \(p\) 的临界值为 \(2\lceil\dfrac{n}{k}\rceil\),也就是说你只需对 \(p\leq 2\lceil\dfrac{n}{k}\rceil\) 的情况跑一遍上述 DP 即可。时间复杂度也随之降到了 \(n^2k\)。

注意滚动数组优化,否则会 MLE。

#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,63,sizeof(a))
#define pb push_back
#define ppb pop_back
#define mp make_pair
template<typename T1,typename T2> void chkmin(T1 &x,T2 y){if(x>y) x=y;}
template<typename T1,typename T2> void chkmax(T1 &x,T2 y){if(x<y) x=y;}
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
namespace fastio{
#define FILE_SIZE 1<<23
char rbuf[FILE_SIZE],*p1=rbuf,*p2=rbuf,wbuf[FILE_SIZE],*p3=wbuf;
inline char getc(){return p1==p2&&(p2=(p1=rbuf)+fread(rbuf,1,FILE_SIZE,stdin),p1==p2)?-1:*p1++;}
inline void putc(char x){(*p3++=x);}
template<typename T> void read(T &x){
x=0;char c=getchar();T neg=0;
while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(neg) x=(~x)+1;
}
template<typename T> void recursive_print(T x){if(!x) return;recursive_print(x/10);putc(x%10^48);}
template<typename T> void print(T x){if(!x) putc('0');if(x<0) putc('-'),x=~x+1;recursive_print(x);}
void print_final(){fwrite(wbuf,1,p3-wbuf,stdout);}
}
const int MAXN=1e3;
const int MAXK=50;
int n,n1,n2,p,k,dp[2][MAXN+5][MAXK+3][MAXK+3];
int isa[MAXN+5],isb[MAXN+5];
int main(){
scanf("%d%d%d",&n,&p,&k);
scanf("%d",&n1);for(int i=1,x;i<=n1;i++) scanf("%d",&x),isa[x]=1;
scanf("%d",&n2);for(int i=1,x;i<=n2;i++) scanf("%d",&x),isb[x]=1;
if(p>=(n+k-1)/k*2){
int ret=0;
for(int i=1;i<=n;i++) ret+=isa[i]|isb[i];
printf("%d\n",ret);return 0;
}
int pre=0,cur=1;memset(dp[pre],192,sizeof(dp[pre]));
dp[pre][0][k][k]=0;
for(int i=1;i<=n;i++){
memset(dp[cur],192,sizeof(dp[cur]));
for(int j=0;j<=p;j++){
for(int x=1;x<=k;x++) for(int y=1;y<=k;y++){
chkmax(dp[cur][j][min(x+1,k)][min(y+1,k)],dp[pre][j][x][y]+((isa[i]&&x<k)||(isb[i]&&y<k)));
if(j<p){
if(isa[i]) chkmax(dp[cur][j+1][1][min(y+1,k)],dp[pre][j][x][y]+1);
if(isb[i]) chkmax(dp[cur][j+1][min(x+1,k)][1],dp[pre][j][x][y]+1);
}
}
} pre^=cur^=pre^=cur;
} int ans=0;
for(int j=0;j<=p;j++) for(int x=1;x<=k;x++) for(int y=1;y<=k;y++)
chkmax(ans,dp[pre][j][x][y]);
printf("%d\n",ans);
return 0;
}

Codeforces 796E - Exam Cheating(dp)的更多相关文章

  1. Codeforces Gym101341K:Competitions(DP)

    http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...

  2. codeforces 711C Coloring Trees(DP)

    题目链接:http://codeforces.com/problemset/problem/711/C O(n^4)的复杂度,以为会超时的 思路:dp[i][j][k]表示第i棵数用颜色k涂完后bea ...

  3. codeforces#1154F. Shovels Shop (dp)

    题目链接: http://codeforces.com/contest/1154/problem/F 题意: 有$n$个物品,$m$条优惠 每个优惠的格式是,买$x_i$个物品,最便宜的$y_i$个物 ...

  4. Codeforces 1051 D.Bicolorings(DP)

    Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...

  5. Codeforces 1207C Gas Pipeline (dp)

    题目链接:http://codeforces.com/problemset/problem/1207/C 题目大意是给一条道路修管道,相隔一个单位的管道有两个柱子支撑,管道柱子高度可以是1可以是2,道 ...

  6. Codeforces 704C - Black Widow(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这种题被评到 *2900 是因为细节太繁琐了,而不是题目本身的难度,所以我切掉这种题根本不能说明什么-- 首先题目中有一个非 ...

  7. Codeforces 682B New Skateboard(DP)

    题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除. dp[i][m]表示字符串0...i中mod 4为m的后缀的个数 通过在i-1添加str[i]字符转移,或者以st ...

  8. Codeforces 543D Road Improvement(DP)

    题目链接 Solution 比较明显的树形DP模型. 首先可以先用一次DFS求出以1为根时,sum[i](以i为子树的根时,满足要求的子树的个数). 考虑将根从i变换到它的儿子j时,sum[i]产生的 ...

  9. Codeforces 543C Remembering Strings(DP)

    题意比较麻烦 见题目链接 Solution: 非常值得注意的一点是题目给出的范围只有20,而众所周知字母表里有26个字母.于是显然对一个字母进行变换后是不影响到其它字符串的. 20的范围恰好又是常见状 ...

随机推荐

  1. centos7 配置ftp服务器搭建(匿名访问,以及本地登录)

    大家好,今天来给大家分享一个基于centos 7的ftp服务器搭建 实现功能:匿名访问,本地登录 查看系统版本: [root@localhost ~]# cat /etc/redhat-release ...

  2. 【二食堂】Beta - Scrum Meeting 3

    Scrum Meeting 3 例会时间:5.15 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 继续完成文本区域划词添加的功能 issue 1. 划词功能已经实现,继续开发 ...

  3. 示波器分析I2C时序波形图

    对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置.今天,我们就随便聊聊这个I2C协议. I2C协议中最重要的一点是I2C地址.这个地址有7位和 ...

  4. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  5. 开发笔记----- python3 小甜点

    一.字典内容排序 1.根据 值大小排序,默认reverse=False:从小到大排序,True:从大到小排序.例: >>> dic1 = {'a1':4,'b1':12,'c1':1 ...

  6. Java测试开发--HttpClient常规用法(九)

    1.HttpClient可以读取网页(HTTP/HTTPS)内容 2.对url发送get/post请求(带不带参数都可以),进行测试 一.maven项目pom.xml需要引入包 <depende ...

  7. 组件通信之全局事件总线 & 消息订阅发布

    全局事件总线 介绍 一种组件间通信的方式,适用于任意组件间通信. 在使用全局事件总线之前需要一些知识准备 所有组件实例的原型对象的原型对象就是 Vue 的原型对象,即VueComponent.prot ...

  8. python Max retries exceeded with URL in requests

    使用requests进行重试 import requests from requests.adapters import HTTPAdapter from requests.packages.urll ...

  9. 《Python语言程序设计》【第3周】基本数据类型

    实例3:天天向上的力量 #DayDayUpQ1.py dayup = pow(1.001,365) daydown = pow(0.999,365) print("向上: {:.2f},向下 ...

  10. 用js实现web端录屏

    用js实现web端录屏 原创2021-11-14 09:30·无意义的路过 随着互联网技术飞速发展,网页录屏技术已趋于成熟.例如可将录屏技术运用到在线考试中,实现远程监考.屏幕共享以及录屏等:而在我们 ...