
DP
文章平均质量分 81
做不完的ACM
加油,努力
展开
-
POJ3254 状压DP
转载:http://blog.youkuaiyun.com/accry/article/details/6607703初学状压就找个比较简单的dp,应该是最好想的状态压缩了。状态压缩dp也就是如果正常开数组,必然会导致内存过大,所有需要另外找一种办法来代替这个问题,那么就用二进制来替代,这应该就是对于状态压缩最通俗的解释了。关于一些二进制的操作比如1 如何判断数字x第i位是否为1 1转载 2018-01-29 22:08:45 · 154 阅读 · 0 评论 -
十六届金马五校赛 L:DP求最长K倍序列
链接:https://www.nowcoder.com/acm/contest/91/L来源:牛客网给一个数组 a,长度为 n,若某个子序列中的和为 K 的倍数,那么这个序列被称为“K 序列”。现在要你 对数组 a 求出最长的子序列的长度,满足这个序列是 K 序列。 输入描述:第一行为两个整数 n, K, 以空格分隔,第二行为 n 个整数,表示 a[1] ∼ a[n],1 ≤ n ≤ 105 , ...原创 2018-04-16 21:06:29 · 248 阅读 · 0 评论 -
Codeforces 710E Generate a String DP
题目链接:http://codeforces.com/problemset/problem/710/E E. Generate a Stringtime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputzscoder wants to ge...原创 2018-04-07 12:48:52 · 186 阅读 · 0 评论 -
Codeforces712D 前缀和优化DP
题目链接:http://codeforces.com/problemset/problem/712/DD. Memory and Scorestime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputMemory and his friend Lexa ...原创 2018-04-07 12:52:56 · 366 阅读 · 0 评论 -
2018中南校赛 C数论,离散化单调DP
Wells有一片神奇的花园,花园里有无数神石和一个神山。每一天,Wells 可以喂神山一个神石,使得神山的高度变为原高度乘上神石的能力值,或者使得所有的神石能力值+1第 0 天时,所有神石的能力值为 0,神山的高度为 1Wells想知道神山最快的长成某一个高度值最少需要多少天定义函数 F(x)是使得 神山 变成 x 的最少天数定义函数 G(x,p):若 F(x)<=p 则 G(x,p)=1 ...原创 2018-04-24 10:10:17 · 269 阅读 · 0 评论 -
SPOJ:Harbinger vs Sciencepal(分配问题&不错的DP&bitset优化)
题目链接:https://vjudge.net/problem/SPOJ-R6PLRainbow 6 is a very popular game in colleges. There are 2 teams, each having some members and the 2 teams play some matches against each other. The team which ...原创 2018-04-24 12:23:48 · 198 阅读 · 0 评论 -
牛客练习赛17B 字符串序列DP
链接:https://www.nowcoder.com/acm/contest/109/B来源:牛客网给出两个串s和x 定义s中的某一位i为好的位置,当且仅当存在s的子序列 满足y=x且存在j使得i=kj成立。 问s中是否所有的位置都是好的位置。输入描述:一行两个字符串s,x,这两个串均由小写字母构成。1 <= |s|, |x| <= 200000输出描述:Yes表示是。No表示不...原创 2018-05-05 12:55:33 · 255 阅读 · 0 评论 -
Codeforces 965E 启发式合并
http://codeforces.com/contest/965/problem/EE. Short Codetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputArkady's code contains nn variables. Each v...原创 2018-04-27 18:42:00 · 374 阅读 · 0 评论 -
ZOJ3471状压DP
题目链接:https://www.nowcoder.com/acm/contest/116/J有n个原子,任意两个原子互相撞击会产生一定的能量,并且被撞击的那个会消失,然后要你求当n个原子发生了n-1次撞击后能产生的最大能量.输入:包含多组实例.每个实例的第一行是N(2<=N<=10),然后接下来N行,每行有N个整数x(0<=x<=1000),第i行的第j个数,表示i原子撞...原创 2018-05-06 10:06:53 · 150 阅读 · 0 评论 -
SPOJ:House Fence(分治&DP)
题目链接:https://vjudge.net/problem/SPOJ-NPC2014B题意:有N个宽度为1的相邻围栏,每个有高度a[i],现在有一把宽度为1的刷子,可以横着刷或者竖着刷,问最少多少次刷完题解:对于每个区间,我们的最优情况的全部竖着刷, 或者横着刷全部公有的部分,其他的继续讨论。由于每次最小横着刷一个,所以讨论次数不超过N。复杂度低于O(N^2)代码:#include <b...原创 2018-05-27 13:34:28 · 302 阅读 · 0 评论 -
HDU6156 Palindrome Function数位dp
题意:求L~R所有的数的l~r进制的f(x,k进制), 如果x是回文串f(x,k进制) = k, 否则等于1; 枚举进制,求出每一种情况,注意膜k,不是膜10,T_T调了好久才发现错在这;题解:dp[pos][start][similar][basic]表示basic进制下,处理到完pos位,从start位开始,similar状态下回文串的个数。则记忆化搜索下即可。#include <bit...原创 2018-05-27 14:38:51 · 144 阅读 · 0 评论 -
HDU2089
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个。题解:dp[len][0 / 1] 表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数。#include <bits/stdc++.h>using namespace std;int dight[32];int dp[20][2];int dfs(int pos, bool sta...原创 2018-05-27 15:07:16 · 1095 阅读 · 0 评论 -
POJ3252
题目链接:http://poj.org/problem?id=3252题意:给出区间[L,R], 统计区间[L,R]有多少个数的2进制0的个数不小于1的个数。题解:dp[pos][start][det], 表示从start位开始,剩余pos位要处理,当前state(二进制0的个数-1的个数)的方案数。为了防止det非负,同时加上35。#include <stdio.h>#includ...原创 2018-05-27 15:32:04 · 373 阅读 · 0 评论 -
Codeforces981E
题目链接:http://codeforces.com/contest/981/problem/E题意:给出若干个操作,问任意选出这些操作的子集,最大值的在1-n的有多少种可能。题解:那就是我其实只需要最后去看一下能否凑成即可 不需要考虑是否是最大 因为在选择的时候我们可以任选子集 可以尝试 好一个数通过好多次加法之后他不是最大的 那么一定构造不出。直接在线段树是跑bitset即可,复杂度(N*Lo...原创 2018-06-01 00:59:58 · 413 阅读 · 0 评论 -
Codeforces 914C
题目链接:http://codeforces.com/contest/914/problem/C题面: 题意:给出一个数(二进制形式),每次将他变成他的二进制表示中1的个数, 问有多少个数可以正好在K此变化成为1。题解:首先用一个数组f记录下f[i]表示i这个数需要f[i]次变换成为1, 则有递推f[i] = f[__builtin_popcount(i)].DP...原创 2018-07-18 16:36:06 · 269 阅读 · 0 评论 -
背包方案数DP
有两种货币。n1种货币每种任意取,n2种货币每种只能取1个。求组合成m的方案数。#include <bits/stdc++.h>using namespace std;const int N = 1E5 + 7;const int MOD = 1E9 + 7;typedef long long ll;int dp1[N];int dp2[N];int n1, n2, m...原创 2018-04-16 20:47:14 · 245 阅读 · 0 评论 -
UESTC
某日,柱爷来到了喵哈哈城,准备干一票银行! 有道是知己知彼,百战不殆,早在前几日,柱爷就委托了卿学姐调查了喵哈哈城的银行资金分布情况! 而昨夜柱爷夜观天象,知晓今日是动手的绝佳时刻! 喵哈哈城是一个大的矩形方阵,而这方阵是由[Math Processing Error]个矩形方格组成,方阵中的每个格子都有一家银行,这个银行的资金是[Math Processing Error]. 而...原创 2018-04-10 21:36:03 · 328 阅读 · 0 评论 -
HOJ2662
题意:给出N,M列棋盘,N*M题解:考虑dp[i][j][t] 为到第i行放了j个棋子,且当前状态为t的方法数,则转移为dp[i][j][t] = sum(dp[i-1][j-num(mark[t])][tt])#include #include #include using namespace __gnu_pbds;using namespace std;#d原创 2018-01-29 22:16:29 · 272 阅读 · 0 评论 -
Codeforces946D Timetable
题目链接: http://codeforces.com/contest/946/problem/D题意:给出n个长度为m的01串,可将最多k个01串删除,之后每个串权值为最前和最后的1出现的距离。比如010010为4,010为1,000为0题解:单独预处理每个串用0~k个可以减去距离的最大值,显然删除ki个一定是从左找KiL个,从右找KiR个,相加为ki, 预处理后了。dp[i][j]表示前i个串...原创 2018-03-07 17:13:58 · 314 阅读 · 0 评论 -
Codeforces931F Teodor is not a liar!
题目大意:有一条线段,上面的点被若干条线段覆盖着. Sasha想知道是否存在一个整点被所有的线段覆盖,她每次可以任选一个点,Teodor会告诉她这个点被多少个线段覆盖,但是Sasha不知道有多少条线段.求Sasha最多猜多少次还不知道这个问题的答案. 也就是说,如果你最多猜n次能知道答案,那么输出n-1.如果猜不到答案就输出n.分析:这种题目把图一画,各种情况考虑一下就能做出来了. 什么情况...原创 2018-03-07 17:36:44 · 550 阅读 · 0 评论 -
bitset复习
题目:求子集的算术和的异或和题解:按照正常思路是维护一个dp[i],表示和为i的组合有多少个,然后如果dp[i]%2==1则ans^i就可以了··然而复杂度为sum*n,果断T考虑用一个布尔数组表示dp[i],dp[i]为1表示和为i的组合的数量为奇数,0为偶数然后每输入一个数x,可以用dp[i]更新dp[i+x],即dp[i+x]=(dp[i+x]+dp[i])%2,既然我们用的是布尔数组,可以...原创 2018-03-08 00:38:58 · 167 阅读 · 0 评论 -
Codeforces 245H 区间DP容斥
题意:给出一个字符串S(|S| <= 5000), Q个询问(1E6), 每次给出L,R, 问L,R里有多少个回文子串。题目链接:http://codeforces.com/contest/245/problem/H题解:dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1] + can[i][j]. 注意下dp顺序即可。 ...原创 2018-03-15 00:23:06 · 195 阅读 · 0 评论 -
HDU4632 区间DP
题意:问串里有多少个回文子序列。题解:区间DP,容斥思想。(和Codeforces245H类似)#include <bits/stdc++.h>using namespace std;using ll = long long ;using ld = long double;#define pb push_back#define SZ(X) ((int)X.size())...原创 2018-03-15 00:25:41 · 212 阅读 · 0 评论 -
Codeforces 449D 容斥+dp
转载地址:http://blog.youkuaiyun.com/drcarl/article/details/54616345题意给定一个n元集,元素为ai,求其有多少个子集,使得其中的元素ai1,.....aik满足 ai1&ai2&⋯&aik=0 (1⩽n,a⩽106)分析要是n和a的范围小一些自然可以直接用01背包做,然而这里a与n都达到了1e6的范围,则要另寻他法。 先求有多少...转载 2018-03-15 19:37:04 · 227 阅读 · 0 评论 -
Codeforces 365D 贪心+dp
D. Free Markettime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputJohn Doe ...原创 2018-03-15 23:35:57 · 293 阅读 · 0 评论 -
牛客练习赛13E 龟兔赛跑DP
E:乌龟跑步有一只乌龟,初始在0的位置向右跑。这只乌龟会依次接到一串指令,指令T表示向后转,指令F表示向前移动一个单位。乌龟不能忽视任何指令。现在我们要修改其中正好n个指令(一个指令可以被改多次,一次修改定义为把某一个T变成F或把某一个F变成T)。求这只乌龟在结束的时候离起点的最远距离。(假设乌龟最后的位置为x,我们想要abs(x)最大,输出最大的abs(x)输入描述:第一行一个字符串c表示指令串...原创 2018-03-17 23:23:11 · 286 阅读 · 0 评论 -
CF 910A DP
题目链接:http://codeforces.com/contest/910/problem/A题意:给出长度为n的01串,1可以走,0不可一,保证串第一个位置和第n个位置为1,每次可以走1-d步,比如你在x处,你可以走到x+1 ~ x+d之间任何一个为1的地方。DP写法1:复杂度O(n*d),很常规的两层for#include <bits/stdc++.h>using names...原创 2018-03-13 11:53:05 · 238 阅读 · 0 评论 -
Codeforces 910B
题目链接:http://codeforces.com/contest/910/problem/B题意:有长度为n的木板,有2扇一样的门,每个门有需要用2个长度为a的板子和一个长度为b的板子,并且对一个板子不能由剩余木板拼凑而来。题解:可以dp,可以枚举排列、/*#include <bits/stdc++.h>using namespace std;int main(){ ...原创 2018-03-13 11:55:37 · 326 阅读 · 0 评论 -
CF768D,概率DP
问题:http://codeforces.com/problemset/problem/768/D 题意:琼恩打败白色的步行者需要k中能量水晶,但是这k种水晶并不是按照一定顺序出现的,而是随机出现,并且每种水晶出现的概率相同,琼恩想知道让每种水晶都至少有一件的概率大于P/2000至少需要多少天,共有q次查询题解:因为每种水晶出现是按照相同的概率的,很容易想到需要DP一下,而且是概率DP。DP[i]...原创 2018-03-21 19:51:52 · 247 阅读 · 0 评论 -
Codeforces893E
题目链接:http://codeforces.com/problemset/problem/893/E题意:给出Q次询问,每次询问给出X,Y, 求有多少种长度为Y的序列满足其相乘得到X。如X=4,Y= 2可由以下6种得到:{ - 4, - 1}; { - 2, - 2}; { - 1, - 4}; {1, 4}; {2, 2}; {4, 1}.首先将X用唯一分解定理分解X = P1^a1 *...原创 2018-03-22 10:05:49 · 146 阅读 · 0 评论 -
Codeforces954F Runner's Problem矩阵优化DP
题目链接:http://codeforces.com/problemset/problem/954/FF. Runner's Problemtime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are running thro...原创 2018-04-01 19:06:04 · 370 阅读 · 0 评论 -
区间DP(POJ1651)
Description 有一个长度为n的序列,现取出其中除了最左和最右的元素(顺序任意),取出一个元素的代价为它本身乘相邻元素的乘积,现在想要以最小的代价取出这些元素。Input 第一行输入一个n,代表元素的数量(n <= 100)第二行输入n个数 (a[i] <= 100);Output 输出最小代价Sample Input 1 610 1...原创 2018-07-21 08:54:31 · 247 阅读 · 0 评论