![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
chaojidage
我只是想多赚点币子,然后好下资源。
展开
-
codeforces628b
题意,就是给你一个字符串,然后就是,其中的字串,看看有没有字串能被4整除。 题解那个看最后两个数字是否能被4整除。然后,看每一个字符能不能被4整除。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MaxN = 3e5 + 10;char a[MaxN];int dp[Max原创 2016-08-29 18:44:38 · 326 阅读 · 0 评论 -
codeforces [Gym-100814K]
题意给你一个a,b,问a除b小数点后n位中,子串组合的数能被p整除的有多少个 a,b位1e16,n为1e6,p为300 思路首先,要先处理出来后小数点后n位,这个就是模拟一下除法,很简单(当时没想到哈)这是一个有意思的“迪屁”这个梗是去年,北大吉如一比赛之后和队友说:这比赛太垃圾了,满场都是数据结构,连一个有意思的迪屁都没有。 接下来就该转移了,转移方程为dp[i][x] = g[i - 1]原创 2017-08-09 15:01:30 · 421 阅读 · 1 评论 -
cf366c 背包+公式平移
题意给你两个集合a,b,然后一个k,一个集合中的几个数相加,除以另一个集合的几个数相加,等于k,问最多第一个集合中的数能使多少 数据范围集合中的数个数是1e5 思路先给他移项,移动之后就会发现这是一个容量是0的背包,由于容量是0,可能有负数,所以要向正方向去平移#include<cstdio>#include<cstring>#include<algorithm>#include<cmat原创 2017-03-27 11:30:11 · 474 阅读 · 1 评论 -
cf463d
题意给你n个数(1~n),k行,让你找这其中的最长公共子序列。n小于1000,k<5 思路这个题就是这么回事,你想啊,枚举第一行,如果,a[1][i] 在a[i]j后面的话,那么,就check(看其他的行中,是否都成立),如果成立,那么就可以推出,dp[i] = max(dp[i],dp[j] +1).要先来个预处理,处理每一个的位置#include<cstdio>#include<algori原创 2017-03-13 19:38:09 · 220 阅读 · 0 评论 -
uva10943
昨天的题,会了组合数学的方法,那个dp的经过别人指点也会了 刚才看了国服第一系列,小漠终于又更新了,我现在感觉现在看视频应该是情怀了。看小智也是 思路转移方程式dp[i][j] = (dp[i][j] + dp[i - k][j - 1])%moli表示分的数,j表示分成几个,然后dp[i - k][j - 1],i-k分成j-1个数,最后一个数加个k#include<cstdio>#incl原创 2017-01-31 10:24:14 · 335 阅读 · 0 评论 -
re :uva11584
这个是给你一个字符串,问这个最少能划分成几个回文串,。 思路这个其实就是,dp[i] = max(dp[i],dp[j]+1)。(dp表示以i为结尾的串能划分成多少个回文串)就是,如果(i,j]中间是回文串的话,那么转移成立,这个是n三方的复杂度,数据范围是1000,其实不能过的,但是不知道怎么就过了,我等哪天有时间研究研究n方的。#include<cstdio>#include<cstring原创 2017-01-30 13:46:45 · 239 阅读 · 0 评论 -
cf566f
这个是个dp。 题意在集合中挑选几个数,让这些数都互相都能整除,数据个数是1e6. 问最多能选几个数, 一看就是dp。。。最近dp做的好少好少。 转移方程就是,dp[a[i]] + 1 = dp[a[i]*2];然后不断的去转移就行了。 这个状态想了有一会,其实很多状态求了但是没有用到,这个就没有考虑好。。。。。 zz#include<cstdio>#include<cstring>原创 2017-01-24 22:33:51 · 513 阅读 · 0 评论 -
codeforces Gym 101102A
这个就是背包,背包专题做少了,再来20道吧,这是约旦的比赛#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int MaxN = 15000 + 10;const int mol = 1e9 + 7;LL a[MaxN] , b[MaxN]原创 2016-10-17 22:22:39 · 317 阅读 · 0 评论 -
hdu5904
这个题吧,水dp,但是我dp真的不好,现在学的好费劲。。。 就是令刚输进来的数为结尾,然后看他 dp1[a[i]] = max(dp1[a[i]] , dp1[a[i] - 1] + 1);就行了,最后再来一发枚举就行了,但是要注意啊,那个dp【-1】是有可能越界的,所以就,注意一下哈。。。#include<cstdio>#include<cstring>#include<algorithm>原创 2016-09-28 20:43:26 · 290 阅读 · 0 评论 -
codeforces 706c
这个题就是不断的暴力转移,可能是我dp很少写,这是个很简单的dp,还有string的用法。很实用,swap很方便。主要就是几个转移。还有就是注意数据范围,他那个是long long,定义无穷大的时候不能用0x3f3f3f3f因为用了的话还有数据比他大,所以还是用1e15.#include<cstdio>#include<algorithm>#include<cstring>#include<c原创 2016-08-19 14:35:14 · 240 阅读 · 0 评论 -
codeforces [Gym-100814E]
题意给你一个n*m的矩阵,从左上走到右下,走最短路,经过矩阵的点的值相乘,问能组成多少个6 思路这个和前一阵的cf的教育场的d题一样的,是一个有意思的迪屁,你要让这条路径有最多的2*3 1.一个状态f[i][j][k]表示i行j列,到这个点最多有k个3.一开始把所有的赋成-1, f[i][j][k] = max(f[i - 1][j][k - a[i].p3] , f[i][j - 1]原创 2017-08-09 16:01:34 · 251 阅读 · 0 评论