![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 64
wzf_2000
这个作者很懒,什么都没留下…
展开
-
【BZOJ1046】 [HAOI2007]上升序列
题意:给出数列,每次询问求出长度为s且序号的字典序最小的上升序列思路:最坑的就是这种题不给spj先来一发lis,每个位置记录以此数为结尾的上升序列最短长度然后输出时,在剩余的数足够的情况下选最前面的代码:#include #define N 10009using namespace std;int n,m,a[N],Stack[N],top,x,now[N];void原创 2016-12-15 15:09:33 · 241 阅读 · 0 评论 -
【Codeforces249D】Donkey and Stars
转换以后就是一个lis。 (程序非常简单易懂)#include <bits/stdc++.h>#define gc getchar()#define ll long long#define mid (l+r>>1)#define N 100009using namespace std;int n,a,b,c,d,m,sta[N],top;struct point{ ll x原创 2017-10-25 19:38:22 · 409 阅读 · 0 评论 -
【Codeforces559E】Gerald and Path
题意:一条路上有nn盏不同的灯,每盏灯所在位置为pip_i,向左或者向右可以照射的距离为lil_i,求最大总照射长度。n≤100,li,pi≤108n \leq 100,l_i,p_i \leq 10^8。题解:这道题dp思路似乎都很神奇?设dp[i][j][k]dp[i][j][k]表示到第ii盏灯(按位置从左到右),最左边的需要覆盖到的位置是jj(0代表不存在未覆盖),最右端位置是kk原创 2017-12-19 18:24:44 · 710 阅读 · 0 评论 -
【Codeforces238E】Meeting Her
题意:有一张nn个点,mm条边的有向图,有kk种巴士,每种巴士有一个起点sis_i和终点tit_i,每一个时刻,巴士都会等概率选择一条两点间的最短路径。询问一次从aa到bb最坏情况下最少需要乘坐几种巴士。n≤100,m≤n×(n−1),k≤100n \leq 100,m \leq n \times (n-1),k \leq 100题解:首先我们需要知道每个巴士的路径上的必经点。然后我们可原创 2017-12-19 18:59:24 · 430 阅读 · 0 评论 -
【Codeforces232E】Quick Tortoise
题意:给你一张n×mn \times m的网格图,每次可以向下或者向右,qq次询问两点从一点是否可到另一点。n,m≤500,q≤6×105n,m \leq 500,q \leq 6 \times 10^5题解:这道题非常像某次cc的最后一道正常题的弱化版(可能更无聊)。首先我们可以预处理分治的过程。每次找到这两个点之间必须经过的中轴线。每层分治处理一个点可以到达的他所在层的中轴线上的哪原创 2017-12-19 19:16:28 · 270 阅读 · 0 评论 -
【Codeforces332E】Binary Key
题意:给出两个字符串p和s和一个正整数k,要求构造长度为k的01串,满足以下要求: 将其不断复制到长度大于等于|p|。对应p跑这个串,如果当前位置为1,则将p当前对应的字符加入一个串q的结尾。(开始为空串)最后得到的串q与s相等。输出满足要求的字典序最小的01串。|p| \leq 10^6,|s| \leq 200,k \leq 2000题解:按照模k的值分类,尽量让字典序小,通过哈原创 2017-12-20 08:05:16 · 427 阅读 · 0 评论 -
【Codeforces301E】Yaroslav and Arrangements
题意:给出n,m,kn,m,k,询问有多少个长度为nn的数组bb满足以下要求: b[i]≤b[i+1](1≤i<n)b[i] \leq b[i+1](1 \leq i < n)1≤b[1]≤b[n]≤m1 \leq b[1] \leq b[n] \leq m将bb数组排列后有大于等于一种小于等于kk种排列aa满足以下要求: |a[i]−a[i+1]|=1(1≤i<n)|a[i]-a[i+1原创 2017-12-20 18:32:03 · 710 阅读 · 0 评论 -
【Codeforces183D】T-shirt
题意:有nn个人和mm种T-shirt,每个人都有一种喜欢的T-shirt,然而你只知道他们每个人喜欢某种的概率。你需要在开始时选定nn件T-shirt的种类,人们会按照编号从11~nn挑选T-shirt,如果剩下还有他喜欢的,则会选走,否则不变。请输出最大的期望送出的T-shirt件数。n≤3000,m≤300n \leq 3000,m \leq 300题解:首先我们可以发现每种T-s原创 2017-12-19 13:43:25 · 797 阅读 · 1 评论 -
【Codeforces436D】Pudding Monsters
题意:开始有无限长的一段格子,有nn个格子种有布丁怪兽,一开始连续的布丁怪兽算一个布丁怪兽。每回合你可以将一个布丁怪兽向左或右移动,他会在碰到第一个布丁怪兽时停下,并与其合并。如果最左边的怪兽向左,你可以认为是将其移动到了无穷远处。有mm个特殊格子,询问最终你最多可以让几个特殊的格子上被布丁覆盖。n≤10000,m≤2000n \leq 10000,m \leq 2000。题解:首先考原创 2017-12-19 14:27:32 · 457 阅读 · 0 评论 -
【Codeforces314E】Sereja and Squares
题意:给你一个仅含小写字母和‘?’的字符串,你需要将问号处填上小写或者大写字母,统计满足下列要求的方案数:(对109+710^9+7取模)每个小写字母都有向后匹配的对应大写字母,并且没有剩余的大写字母。每两对对应的小大写字母构成的区间[l1,r1],[l2,r2][l_1,r_1],[l_2,r_2]满足l1<r1<l2<r2l_1<r_1<l_2<r_2或者l1<l2<r2<r1l_1<l_原创 2017-12-19 14:50:02 · 897 阅读 · 0 评论 -
【Codeforces856C】Eleventh Birthday
题意:给你nn个数,询问将其按照一定顺序排列后得到的数能被11整除的排列有几种。多组询问。t≤100,n≤2000t \leq 100,n \leq 2000。题解:首先我们发现10≡−1(mod11)10 \equiv -1(mod 11),所以可以将nn个数根据长度的奇偶性分为两类。显然长度为偶数的不会影响长度为奇数的贡献。而长度为奇数的从偶数位开始的数的个数必为⌊n2⌋\lfloo原创 2017-12-19 15:08:21 · 412 阅读 · 0 评论 -
【Codeforces536D】Tavas in Kansas
题意:给你一张nn个点mm条边的无向图,每个点有一个点权pip_i(存在负数)有两个人在进行游戏,他们分别在ss、tt号点。两个人轮流操作,每次操作选出一个非负整数xx,表示将到他们所在点最短距离小于等于xx的点的点权拿走。(拿走后点权消失,且每次拿走的有点权的点的个数至少为1)询问最后胜负情况(谁的总点权和较大)。n≤2000,n−1≤m≤100000n \leq 2000,n-1 \l原创 2017-12-19 15:28:08 · 402 阅读 · 0 评论 -
【Codeforces809D】Hitchhiking in the Baltic States
dp[i]dp[i]表示长度为ii的序列最后一个数的最小值。 考虑转移时加入一段区间[l,r][l,r]。 对于最大的满足dp[i]<ldp[i]<l的位置: dp[i+1]=min(dp[i+1],l)dp[i+1]=min(dp[i+1],l) 因为dp[i+1]>=ldp[i+1]>=l,所以转移可以变为直接赋值(一定发生)。 对于最大的满足dp[j]<rdp[j]<r的位置: d原创 2017-10-25 16:48:20 · 439 阅读 · 0 评论 -
【Codeforces797F】Mice and Holes
题意: nn个老鼠,mm个洞,告诉你他们的一维坐标和mm个洞的容量限制,问最小总距离。列出dp方程: dp[i][j]表示从左到右的前i个洞装j只老鼠的最小代价dp[i][j]表示从左到右的前i个洞装j只老鼠的最小代价 发现这个方程在每一层中都是单调的,可以类似斜率优化维护。#include <bits/stdc++.h>#define gc getchar()#define ll lon原创 2017-09-26 17:04:09 · 549 阅读 · 0 评论 -
Codeforces 486E LIS of Sequence
题意:给出一个数列,判断每个数:1:不在任何lis中2:在lis中,但不在所有的lis中(就是lis不一定要经过他)3:在所有lis中思路:对于1,前后各跑一遍,然后记录一下以它开始(到它结束)的lis长度,若开始和结束的两个长度和对于3,记录所有不是1情况的数以它开始的lis长度,若一个长度出现>=1次,那么所有为这种长度的数均不是必经过的数(就是为2),否则为1(似乎也原创 2016-12-15 14:31:48 · 261 阅读 · 0 评论 -
【BZOJ4824】 [Cqoi2017]老C的键盘
树形dp!dp[x][i]表示dp到x且x的排名为i的方案数,然后组合什么的乘一乘就好了。具体转移我也没想过,直接看std了。。(应该挺简单的吧)#include #define N 109#define ll long long#define mod 1000000007#define gc getchar()using namespace std;ll n,a[N],dp[原创 2017-05-07 14:00:35 · 587 阅读 · 0 评论 -
【BZOJ4000】 [TJOI2015]棋盘
比较简单的矩阵快速幂优化dp#include #define gc getchar()#define ll unsigned int#define N 10#define M 6using namespace std;int n,m,p,k;ll a[3][N<<1],f[1<<M],Ans[1<<M],ans;struct Matrix{ ll a[1<<M][1<<M]原创 2017-08-04 08:30:55 · 371 阅读 · 0 评论 -
【bzoj1492】[NOI2007]货币兑换Cash
此题非常的经典(似乎cdq分治就是从这题引出的)基础思想就是cdq分治优化dp。网上题解似乎很多。。所以dp什么的就不写了。重点就是通过cdq来满足斜率优化的条件(维护凸包)#include #define gc getchar()#define N 100009#define mid (l+r>>1)#define eps 1e-7#define inf 1e10原创 2017-08-04 08:42:42 · 268 阅读 · 0 评论 -
【bzoj2149】拆迁队
似乎又是一道cdq维护dp这题首先要按照d[i]=a[i]-i的值分层dp。在cdq分治中,相当于前一层dp为修改,当前层为询问。考虑如何维护[l,mid]的修改对于[mid+1,r]的询问的影响。列出dp方程发现只要寻找最小值即可。然后就在维护的凸包上三分最小值的位置就好。#include #define gc getchar()#define N 120009#d原创 2017-08-04 08:48:40 · 424 阅读 · 0 评论 -
【bzoj2244】[SDOI2011]拦截导弹
这题就是个三维偏序。三维偏序就是排序一维,cdq一维,数据结构一维。然后尴尬的是还要求概率。也就是方案数。cdq正反各一遍,求三维偏序时,顺便dp记录方案数就好。#include #define gc getchar()#define N 50009#define mid (l+r>>1)#define ll long longusing namespace std;原创 2017-08-04 08:52:01 · 368 阅读 · 0 评论 -
【bzoj2726】[SDOI2012]任务安排
首先暴力dp应该是很简单的dp[i]=min(dp[j]+cost[i]*(T[i]-T[j]+S)) (j>i)本来简单的斜率优化因为脑洞大的出题人一句时间可以是负的变成了cdq维护dp但比较好的一点是可以先把所有决策点加入凸包,在枚举询问(按斜率排序(T[pos]))在凸包上跑答案。#include #define gc getchar()#define N 50000原创 2017-08-04 08:57:01 · 482 阅读 · 0 评论 -
【bzoj1195】[HNOI2006]最短母串
此题似乎是一个dp。。 dp[i][j]表示选了i这个集合的字符串,最后一个是j的最短字符串。 (字典序顺便搞定) 然后发现需要处理掉一串为另一串子串的情况,特判一些特殊情况(或者奇怪的姿势)就好了。。 这题很卡空间,请务必不要乱开数组。#include <bits/stdc++.h>#define gc getchar()using namespace std;int n,len[1原创 2017-08-05 08:58:13 · 394 阅读 · 0 评论 -
【bzoj3349】[Zjoi2016]小星星
容斥+树形dp 枚举集合S,要求所有点只能和S中的点配对,可以多个点匹配一个点。f[x][y]表示x匹配的是y,以x为根的子树的方案数,转移很简单,稍微认真思考就知道。枚举集合S,要求所有点只能和S中的点配对,可以多个点匹配一个点。\\f[x][y]表示x匹配的是y,以x为根的子树的方案数,转移很简单,稍微认真思考就知道。#include <bits/stdc++.h>#define gc ge原创 2017-08-07 08:58:33 · 310 阅读 · 0 评论 -
【Codeforces176D】Hyper String
定义dp[pre][len]dp[pre][len]表示到TT的第prepre位,长度为lenlen的最长公共子序列在SS中出现位置最靠左的右端点位置(就是在满足最长公共子序列的长度为lenlen的情况下,第lenlen个字母在SS中最左边的位置)。 考虑如何转移: dp[pre][len]=min(dp[pre−1][len−1],与T[pre]相等且在S中的位置在dp[pre−1][len−原创 2017-09-26 16:54:25 · 364 阅读 · 0 评论 -
【Codeforces241B】Friends
题意: 给你nn个数,问从其中选择互不相同的mm对数的异或和之和最大为多少。在Trie上dp应该就好了。#include <bits/stdc++.h>#define gc getchar()#define ll long long#define N 50009#define T 31#define mod 1000000007#define inv2 ((mod+1)/2)usin原创 2017-09-26 16:59:08 · 407 阅读 · 0 评论 -
【Codeforces776G】Sherlock and the Encrypted Data
题意:设xx的16进制表示为xn−1⋯x1x0x_{n-1} \cdots x_1x_0,那么设h(x)=2xn−1|2xn−2|⋯2x1|2x0h(x)=2^{x_{n-1}}|2^{x_{n-2}}| \cdots 2^{x_1}|2^{x_0},求区间[l,r][l,r]中满足x xor h(x)<xx\ xor\ h(x)< x的数的个数。题解:显然只跟最后几位有关,就是一个16进制原创 2017-12-19 16:00:38 · 322 阅读 · 0 评论