![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
a1214034447
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #851 (Div. 2) A-E
Codeforces Round #851 (Div. 2)原创 2023-02-21 22:46:53 · 353 阅读 · 0 评论 -
Codeforces Round #821 (Div. 2) A-D2
Codeforces Round #821 (Div. 2)原创 2022-09-22 15:38:17 · 115 阅读 · 0 评论 -
Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ
Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ原创 2022-08-18 17:10:25 · 146 阅读 · 0 评论 -
2019牛客暑期多校训练营(第八场)A题(单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/888/A解题思路:将问题转化为计算一个点作为极大全1矩阵的右下角的次数的和。那么可想而知当一个点(i,j)作为右下角时用(i,k)做左下角比(i,q)时的宽要大(j>k>q),如果是小的话,也不会是极大了。所以当(i,j)作为右下角时,他的多个极大值越往左长越大,宽越小。因此我们就需要...原创 2019-12-04 13:55:37 · 228 阅读 · 0 评论 -
Codeforces Round #603 (Div. 2) 题解
题目链接:https://codeforces.com/contest/1263A - Sweet Problem把最小值分摊给其他两个,然后剩下的再加上最小值#include<bits/stdc++.h>#define x first#define y second#define inf 0x3f3f3f3fusing namespace std;typ...原创 2019-12-04 13:38:54 · 315 阅读 · 0 评论 -
Educational Codeforces Round 77 (Rated for Div. 2) 题解
题目链接:https://codeforces.com/contest/1260A - Heating #include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;typedef unsigned long long ull;typedef long long ll;typedef pai...原创 2019-11-30 21:00:15 · 253 阅读 · 0 评论 -
The 2019 China Collegiate Programming Contest Harbin Site
题目链接:https://codeforces.com/gym/102394A - Artful Paintings设S[i]表示前i个位置放了i个灯泡,那么就有这么一些关系,0 <= S[i] - S[i-1] <= 1,S[Ri] - S[Li-1] >= Ki,S[n] - (S[Ri] - S[Li-1]) >= Ki由于第三个式子有三个未知数,又...原创 2019-11-07 16:04:22 · 464 阅读 · 0 评论 -
2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)
题目链接:https://codeforces.com/contest/1252A - Copying Homework水题#include<bits/stdc++.h>using namespace std;const int mx = 1e5+5;struct node{ int id,x; bool operator<(const node &...原创 2019-11-06 23:27:22 · 452 阅读 · 0 评论 -
Codeforces Round #589 (Div. 2) -- 题解
A. Distinct Digits#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;typedef long long ll;const int mx = 1e5 + 10;int top;int a[mx];bool check(int i){ bool b[20]; memse...原创 2019-10-15 20:57:58 · 302 阅读 · 0 评论 -
Comet OJ - Contest #0 题解
题目链接:https://cometoj.com/contest/34/problemsA.解方程,(由公式可知y>=z,0<=n<=根号x)移项再平方可得那么如果n是个平方数,很明显解有无穷多个。否则必须满足 n = 4*y*z才有整数解,即 x = (z+y)。所以只要枚举n/4的所有因子就好了。(注意这样做卡longlong,要想不卡去筛素数吧)...原创 2019-04-03 21:15:08 · 652 阅读 · 1 评论 -
Codeforces Round #548 (Div. 2) 题解
题目链接http://codeforces.com/contest/1139A. Even Substrings判断个位是否是奇数即可。#include <iostream>#include <set>#include <array>#include <vector>using namespace std;typedef...原创 2019-03-31 18:03:58 · 371 阅读 · 0 评论 -
Codeforces Global Round 2 题解
题目链接:http://codeforces.com/contest/1119/problem/AA. Ilya and a Colorful Walk两点的最远距离是相互的,所以其中一个点肯定是左右端点。#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;typedef long ...原创 2019-04-12 22:40:20 · 160 阅读 · 0 评论 -
hdu 5234-三维背包
题解思路:n*m的两次背包,时间复杂度O(n*m*k),dp[i][j][t]表示到i,j做个位置容量最大为t能装多少,理解之后就是01背包问题。代码:#include<bits/stdc++.h>using namespace std;const int mx = 1e2+2;int n,m,k;int maps[mx][mx],dp[mx][mx]...原创 2017-10-24 20:27:14 · 443 阅读 · 0 评论 -
Gym - 101170A[DP+思维]
题目链接:https://vjudge.net/problem/Gym-101170A解题思路:首先要确定的是,改变次数最多不会超过2*n次,因为n最多40,所以我们只要改变每个数的前两个最高位,肯定可以让n个数有序。然后我们就可以想办法搞个DP[i][j]表示将前i个数变成有序花了j次的最小值。为什么是最小值呢,维护最小值就是使得高位尽量小,那么就使得后面的数,更有机会直接...原创 2019-05-08 17:53:29 · 222 阅读 · 0 评论 -
洛谷 P2422-仙人掌图
题目链接:https://www.luogu.org/problemnew/show/P4244解题思路:不懂基环树的可以先做这个:https://blog.csdn.net/a1214034447/article/details/88318541对于仙人掌图可以看做基环树中环的节点为根的树还是个基环树的多个“嵌套”。所以做法是大同小异。但这里要求最小距离的最大,而且边长度都...原创 2019-03-07 20:09:40 · 892 阅读 · 0 评论 -
BZOJ 1791-基环树DP
题目链接:https://darkbzoj.cf/problem/1791解题思路:如果题目给的是一棵树,那么就跟简单了,直接搞个DP求出树上最长两点路径就OK了:dp[i]表示以i为子树的节点到i的最长距离。那么有ans = max(ans,dp[u]+dp[v]+1);dp[u] = max(dp[u],dp[v]+1);其中v是u的子节点。所以我们可以把这个基环...原创 2019-03-07 19:57:48 · 233 阅读 · 0 评论 -
Gym - 100451B - 大数+DP
题目链接:https://vjudge.net/problem/Gym-100451B 解题思路:原来的汉诺塔移动公式是(2^n)-1,那么如果我们把每两个大小相等的看成一个,相当于移动一个花费变成了2,在不考虑两个的上下顺序的情况下移动移动次数就是2*((2^n)-1) = 2^(n+1) - 2现在的问题是要考虑相同大小的两块最终顺序问题。用g[i]表示移动前2*i块的最小...原创 2019-01-12 20:42:37 · 814 阅读 · 0 评论 -
Gym - 102056I(2018EC final) - DP
题目链接:https://vjudge.net/problem/Gym-102056I 解题思路:这题首先是要转化每个位置的贡献,ai操作明显是贡献一次,bi操作则是一个累加贡献(例如在i出操作bi,在j处操作ai,那么此时bi的贡献就是(j-i)*bi),ci的贡献就是跟后面操作ai的次数有关了。那么我们就想到了后面的操作不会影响前面,所以就考虑倒着DP。dp[i][j][k...原创 2019-01-12 20:10:50 · 582 阅读 · 0 评论 -
Gym - 100520C - DP+打表
题目链接:https://vjudge.net/problem/Gym-100520C 解题思路:一开始的想法是思维的dp,第一维是走了几步,第二维是当前点下一步能走的最大值,第三维是当前点下一步能走的最小值,第四维是当前点的值。显然如果从当前点的值变小走的话既不会改变最大值也不会改变最小值,但是如果是往上走的话最大值就会加一。然而这个时候最小值就无法维护了,因为即不一定是上一个状...原创 2018-11-15 22:29:02 · 171 阅读 · 0 评论 -
SPOJ - CATTACK - 最短路或者dp
题目链接:https://vjudge.net/problem/SPOJ-CATTACK 解题思路;根据思路建图跑最短路,或者dp更简单. #include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;const int mx = 2e5+10;struct node{ int y,w;...原创 2018-10-30 20:28:41 · 207 阅读 · 0 评论 -
Gym - 101635C - dfs+矩阵快速幂
题目链接:https://vjudge.net/problem/Gym-101635C 解题思路;对于每一列一共有(1<<n)个状态,0表示没方块,1表示有,对于f[m][i]表示前m-1列都是满的,第m列是i个状态的方案数,那么f[m][i]就可以从f[m-1][]中的若干个转移过来.然后利用dfs求出系数矩阵,之后进行快速幂.1.在m列的第j行放一共1*1的方块...原创 2018-10-26 20:42:10 · 214 阅读 · 0 评论 -
hdu 6082-完全背包
题目链接:点击打开链接题解思路:跟完全背包差的是这里可以超过他的血量,所以每次都从1开始。代码:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include...原创 2017-08-15 19:07:31 · 298 阅读 · 0 评论 -
Codeforces Round #551 (Div. 2) 题解
题目链接:http://codeforces.com/contest/1153A. Serval and Bus计算每一班车到达车站的时间超过m,并且离m最近的时间去最小就好了。#include <bits/stdc++.h>using namespace std;const int mx = 1e2 + 10;int main(){ int n,m; ...原创 2019-04-23 17:05:14 · 206 阅读 · 0 评论 -
Codeforces Round #424 Div. 2专题
A题:波峰的时候可以连续相等否则其他不行。然后满足只有一个波峰或者单调就行了。代码:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>...原创 2017-07-20 18:53:57 · 224 阅读 · 0 评论 -
2019 百度之星初赛 [01-04]
题目链接http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=8621001:对小的暴力枚举#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef complex<double> comp;cons...原创 2019-08-23 23:30:32 · 425 阅读 · 0 评论 -
Codeforces #564 (Div. 2) D. Nauuo and Circle[树形DP]
题目链接:http://codeforces.com/contest/1173/problem/D解题思路:首先得知道按照圆周顺序的话,那么一颗子树必须存放在连续的一段区间里面,现在我们假设根节点是1,那么一颗为u做根节点的子树他的方案数就是各个儿子的方案数的乘积最后再乘以儿子个数+1(u节点本身)的排列方案数。所以最后答案很明显是每个节点的度的阶乘的乘积,然后由于有n个点可以做...原创 2019-06-09 20:46:35 · 209 阅读 · 0 评论 -
4543: [POI2014]Hotel加强版[树形DP+长链剖分]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4543解题思路:长链剖分定义:f[i][j]表示以i为根节点的子树,有多少个节点和i的距离是j的.g[i][j]表示以i为根节点的子树,在子树外一个距离i为j的点可以跟i子树内的两个点组成两两相等的方案数.那么就有:f[u][j+1] += f[v][j]...原创 2019-06-03 16:57:39 · 178 阅读 · 0 评论 -
UVALive - 6892[区间DP]
题目链接:https://vjudge.net/problem/UVALive-6892解题思路:一个表达式肯定可以分成左右两个部分然后以中间那个运算符合并之后的值,所以可以直接搞把数组复制两遍,然后搞个区间DP。#include <bits/stdc++.h>#define fi first #define se secondusing namespace ...原创 2019-05-12 21:08:26 · 135 阅读 · 0 评论 -
Comet OJ - Contest #3 A-D
题目链接:https://www.cometoj.com/contest/38/problemsA.比赛暴力枚举+排序#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int mx = 500 + 10;...原创 2019-05-11 17:30:12 · 319 阅读 · 0 评论 -
Gym - 101170[强连通缩点+DP]
题目链接:https://vjudge.net/problem/Gym-101170B解题思路:题目悄悄地告诉你,最多只含有5元环,所以我们先缩点,然后跑dp。对于一个强连通分量,去暴力每个点的最长路径,当遇到点不属于该连通分量时,直接可以返回其DP值了,对于环内的点最多也就是O(5!)。#include <bits/stdc++.h>using namespac...原创 2019-05-08 22:11:11 · 364 阅读 · 1 评论 -
Gym - 101174E[AC自动机+DP]
题目链接:https://vjudge.net/problem/Gym-101174E解题思路:数据小,首先想可以不可以DP(虽然我一开始傻了没有往这个方向想)将n个串建一个AC自动,然后用dp[i][j][k]表示选取了长度为i的密码长度,这个密码后缀对应自动机上的节点j,k是三个字符的选择情况的二进制,然后就是标记不可包含的节点,之后就可以在AC自动机上跑DP了。#in...原创 2019-05-08 17:41:22 · 204 阅读 · 0 评论 -
Gym - 101190F 期望DP
题目链接:https://vjudge.net/problem/Gym-101190F解题思路:考虑每张照片在顶部的概率然后乘以这个点的期望长度,将这个值记做e[i],那么最后答案就是∑e[i].#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mx = ...原创 2019-04-30 12:27:11 · 332 阅读 · 0 评论 -
Gym - 101174D[概率期望DP]
题目链接:https://vjudge.net/problem/Gym-101174D解题思路:其实数字是什么根本不重要,因为它们概率是相同的,关键的是在于A和B中卡片个数相同的数量,所以其实我们可以把所有转态压缩成一个10*10*10的三维dp(其实还远远不到这么多)。所以我们可以将2*C个数分为,m,w,m,2*m + 2*w = 2*C,m表示A的卡片中B没有的个数(所以B...原创 2019-05-05 12:46:25 · 184 阅读 · 0 评论 -
Comet OJ - Contest #2 A-E
题目链接:https://cometoj.com/contest/37/problemsA.因自过去而至的残响起舞对于爆炸型增长的数来说,增长到x只需要log级别就ok了,所以直接暴力就好了。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mx = 1e5 +...原创 2019-04-29 12:34:18 · 277 阅读 · 0 评论 -
牛客国庆集训派对Day6 F - DP
题目链接:点击这里 解题思路:g[i]表示i个点不做里面没有重儿子的最大花费值,dp[i]表示i个点的树的最大花费值.因为每次i从1枚举,所以g[i]的树中,最大树节点数不会超过i.所以可以直接dp #include <bits/stdc++.h>using namespace std;typedef long long ll;const double ...原创 2018-10-09 21:18:32 · 241 阅读 · 0 评论 -
牛客国庆集训派对Day6 - E DP
题目链接:点击这里 解题思路:假设现在处于(x,y)位置刚获得一个奖励,那么肯定x∈(a数组),y∈(b数组),所以将a数组,b数组,离散化变成矩阵,那么dp[i][j] = max(dp[i-1][j],r,dp[i][j-1]+c),因为要到达(i,j)第一种先到达i,第二种是先到达j. #include<bits/stdc++.h>#define in...原创 2018-10-09 20:56:19 · 131 阅读 · 0 评论 -
hdu 6212-区间DP
题目链接:点击打开链接题解思路:这里我们将连续两个的1或0绑在一起将他的权值改成2然后就可以构成一个0、1交替的字符串然后又出现三种情况1、dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);2、当i位置数跟j位置数相同时 if(a[i]+a[j]==2) dp[i][j]=min(dp[i][j],dp[i+1][j-1]+1);原创 2017-10-16 21:38:14 · 318 阅读 · 0 评论 -
hdu 6170 - dp
题目链接:点击打开链接题解思路:因为数据就2500我们很容易想到dp,要是有想到dp那实现方法也很简单,看代码就懂了。代码:#includeusing namespace std;typedef long long ll;const int mx = 3e3+10;int n,m,len1,len2;char str[mx],stc[mx];int dp[m原创 2017-08-23 18:49:03 · 245 阅读 · 0 评论 -
hdu 6143-动态规划
题目链接:点击打开链接题解思路:F[i]表示放到姓里面的字符个数是i的方法有几种,那么我们不考虑刚好放i种的情况是不是是i^n,那么必须要i个都要在里面就是i^n-C(i,i-1)*F[i-1]-C(i,i-2)*F[i-2]...-C(i,1)F[1],有了F[i]以后那么每次考虑姓放i个那么名字里面就可以随便放了,就是(m-i)^n,那么ans = (ans+c[m][i]*F[i原创 2017-08-18 20:25:59 · 297 阅读 · 0 评论 -
hdu 6035-树状DP
题目链接:点击打开链接题解思路:一开始绞尽脑汁怎么正向解决这个问题,就是定义一个优先级然后看每个节点在优先级的情况下的贡献点是多少,发现好难做啊。看了别人的博客之后发现反向思考原来简单的多。假设这颗树的所以不用颜色有sums种,那么我们假设每种颜色对每个路径都有贡献那么答案应该就是(所以路径数*颜色数)- (所以颜色没有参与贡献的总和)。那么我们用sum数组保存,sum【i】表示i颜色原创 2017-07-27 11:05:44 · 286 阅读 · 0 评论