动态规划
文章平均质量分 56
huatian5
run
展开
-
leetcode 44. 通配符匹配
题目:https://leetcode-cn.com/problems/wildcard-matching/思路:dp[i][j] 表示 x 串的前 i 个与 y 串的前 j 个是否匹配;y[j] 为 ‘?’ 当前匹配,直接为 dp[i-1][j-1];y[j] 为 ‘*’,可能有两种情况:如果表示空字符为 dp[i][j-1],如果非空字符为 dp[i-1][j],例 “abb”,“a*”;初始化需要考虑 x 为空,y 前缀全为 ‘*’ 的情况为匹配的。代码:class Solution原创 2020-12-28 21:11:09 · 155 阅读 · 0 评论 -
hackerrank The Coin Change Problem(dp)
题目:https://www.hackerrank.com/challenges/coin-change/problem 题意:给你m种硬币,每种数量不限,问你硬币的和为n的方案数 思路:开始想的用dp[i][j]表示i种硬币组成和为j的方案数,那么dp[i][j] = dp[i-1][j] + dp[i][j-a[i]]; ac之后发现可以缩成一维(开始就该想到的,不熟练啊,,)1.#inc原创 2017-10-18 18:56:22 · 373 阅读 · 0 评论 -
C. Helga Hufflepuff's Cup(树形dp)
题目:http://codeforces.com/contest/855/problem/C 题意:给你一棵树,n个结点,结点有m种type。type k至多有x个,如果结点是type k的,那么其相邻结点的type都要小于k 思路:树形dp dp[i][j][k]代表以i为根,有j个“type k”的方案数 (k=0,type < k; k=1,type = k; k原创 2017-10-01 09:26:51 · 516 阅读 · 0 评论 -
Manthan, Codefest 17 B. Marvolo Gaunt's Ring(前后缀/dp)
题目:http://codeforces.com/contest/855/problem/B 题意:给一个数组,让求p·ai + q·aj + r·a 的最大值(1 ≤ i ≤ j ≤ k ≤ n) 思路: 维护最大前后缀 dp参考here 代码:#include<bits/stdc++.h>using namespace std;const int N = 100005;int a[原创 2017-09-30 21:28:15 · 423 阅读 · 0 评论 -
洛谷 P2831 愤怒的小鸟(状压dp)
题目:https://www.luogu.org/problem/show?pid=2831 思路: n^3预处理 二进制数s用来表示小猪的状态,1表示被消灭, f[i][j]表示i点和j点确定的曲线可以干掉的小猪数 dp[s]表示s状态的小猪所需要的最少小鸟数 dp[s | x] = min(dp[s | x],dp[s] + 1) 代码(参考sdfzyhx):/*n^3预处理二原创 2017-09-22 09:55:29 · 445 阅读 · 0 评论 -
leetcode 691. Stickers to Spell Word(状压dp)
题目:https://leetcode.com/contest/leetcode-weekly-contest-53/problems/stickers-to-spell-word/# 题意: 思路: 代码:原创 2017-10-08 11:53:20 · 1663 阅读 · 0 评论 -
Codeforces Round #135 (Div. 2)(树dp)
题目:[http://codeforces.com/contest/219/problem/D](http://codeforces.com/contest/219/problem/D)题意:给你一棵树,选择一个结点使得可以改变最少的边的方向达到其他所有点输出改变边的个数,输出结点(多个的话升序输出)思路:建边,方向对应0,反边对应为1,先dfs统计结点的子树贡献,dp[i]表示从i出发在i的子树中的总贡献,原创 2017-09-12 22:51:07 · 203 阅读 · 0 评论 -
HDU-2196 Computer(树dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意:给出一棵树,让求每个点能到达的最远距离 思路: dp[u][0]表示u的子树中所能达到的最远距离 dp[u][1]表示u的子树中所能达到的次远距离 dp[u][2]表示u的父亲结点所能达到的最远距离 难点是在求dp[u][2]上 代码:#include<bits/stdc++.h>原创 2017-09-12 17:21:50 · 241 阅读 · 0 评论 -
HDU-1520 Anniversary party(树dp)
题目:[http://acm.hdu.edu.cn/showproblem.php?pid=1520](http://acm.hdu.edu.cn/showproblem.php?pid=1520)题意:开party……。多个下属对应其上司,邀请了上司参加,其下属就不能参加,每个人有个value,求最大的value和思路:树dpdp[u][0]没有被邀请的最大值,dp[u][1]被邀请的最大值dp[u][0]原创 2017-09-12 15:49:21 · 192 阅读 · 0 评论 -
HDU-6201 transaction transaction transaction(树dp / 最长(短)路)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:n个城市,n-1条路,商人要选一个城市买书,一个城市卖书,每个城市都有对应的price,每条路都有对应的的花费,求最大的money 思路: 树dp,dp[u][0]代表买书最大收益,dp[u][1]代表卖书最大收益 dp[u][0] = max(dp[u][0],dp[v][0]-w);原创 2017-09-12 15:55:33 · 238 阅读 · 0 评论 -
POJ-3107 Godfather & POJ-2378 Tree Cutting(树的重心)
题目:http://poj.org/problem?id=3107 题意:给你一棵树,让你找到结点,使得剩下的联通块中的结点数量最大的尽量小 即树的重心的定义https://baike.baidu.com/item/%E6%A0%91%E7%9A%84%E9%87%8D%E5%BF%83/20416316?fr=aladdin 思路:直接dfs找其子树的max(结点数量,n-结点数量) 这个原创 2017-09-14 15:17:54 · 400 阅读 · 0 评论 -
POJ-3140 Contestants Division(树dp)
题目:http://poj.org/problem?id=3140 题意:给你一棵树,让你找一条边,使得两颗子树权值和相差最小,求最小的权值差 思路:直接树dp,找树权值和sum和2*子树权值和的最小差值就行了 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>原创 2017-09-14 16:05:14 · 321 阅读 · 0 评论 -
POJ-1655 Balancing Act(树的重心)
题目:http://poj.org/problem?id=1655 题意:给你一棵树,让你找到结点(顺序最小的),使得剩下的联通块中的结点数量最大的尽量小,并输出这个数量 思路:同poj-3107 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using原创 2017-09-14 15:20:01 · 250 阅读 · 0 评论 -
Wannafly模拟赛 树(dp)
题目:https://www.nowcoder.com/acm/contest/submit/86fc8c46a8ce4c1fba763b8cf311f805?ACMContestId=2&tagId=4 思路:当时瞎想,题目说了是一棵树,其实不用管连接了,直接dp就行了 用dp[i][j]代表i个结点用j种颜色合法的方案数 dp[i][j] = dp[i-1][j] + dp[i-1][j-原创 2017-09-05 16:15:50 · 316 阅读 · 0 评论 -
BZOJ 4818: [Sdoi2017]序列计数 (动态规划+矩阵乘法)
来源:http://blog.csdn.net/qq_33229466/article/details/70055284 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=4818 分析一眼容斥,用所有方案减去不含质数的方案。 设f[i,j]表示序列前i个数模p的余数为j时的方案数。f[i,j]=∑f[i−1,(j−k)modp] 构建转载 2017-08-14 10:26:22 · 322 阅读 · 0 评论 -
HDU 6196 happy happy happy(暴搜+剪枝+dp)
来源:http://blog.csdn.net/snowy_smile/article/details/77929954题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=6196 代码+思路:#include<stdio.h>#include<iostream>#include<string.h>#include<string>#incl转载 2017-10-01 17:29:42 · 427 阅读 · 0 评论 -
HDOJ 2089 不要62(数位dp/打表)
不要62Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 30057 Accepted Submission(s): 10584Problem Description杭州人称那些傻乎乎粘嗒嗒的人为62(音:lao原创 2016-01-13 16:30:15 · 411 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(完全背包)
Piggy-BankTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18409 Accepted Submission(s): 9300Problem DescriptionBefore ACM can do原创 2016-03-17 12:02:38 · 528 阅读 · 0 评论 -
leetcode 91. Decode Ways(dp)
题目:https://leetcode.com/problems/decode-ways/description/题意:让你判断字符串可能有多少解码方式思路:当前字符为’0’,则dp[i] = dp[i-2]当前字符不为’0’,小于等于26,dp[i] = dp[i-1] + dp[2]; 大于26,dp[i] = dp[i-1]代码:class Solution {public:...原创 2018-09-21 00:31:41 · 253 阅读 · 0 评论 -
POJ 3356 AGTC(dp) x串变成y串最小代价
题目:http://poj.org/problem?id=3356题意:给你x串和y串,让求操作x串变成y串的最小次数操作:插入、删除、修改一个字符思路:用dp[i][j]表示x的前i个字符变成y的前j个字符的最小次数修改 dp[i][j] = dp[i-1][j-1]+1插入 dp[i][j]=dp[i][j-1]+1删除 dp[i][j]=dp[i-1][j]+1代码:#in...原创 2018-09-18 22:36:17 · 270 阅读 · 0 评论 -
HDU4532(组合DP) n种不同的元素,相同的不能相邻
当n为三时,写了个暴力的#include <iostream>#include <cstdio>#include <map>#include <cmath>using namespace std;const int N = 105;long long dp[N][N][N][3];int main(){ int a,b,c;...原创 2018-09-18 21:48:17 · 748 阅读 · 0 评论 -
leetcode 847. Shortest Path Visiting All Nodes(floyd+状压dp)
题目:https://leetcode.com/problems/shortest-path-visiting-all-nodes/description/ 思路:用dp[st][i]存储在i节点时,遍历过点的状态class Solution {public: const int INF = 12*12+5; int d[12][12]; int dp[1<...原创 2018-09-07 00:09:01 · 292 阅读 · 0 评论 -
leetcode 792. Number of Matching Subsequences(dp)
题目:792. Number of Matching Subsequences 题意:让求words中多少字符串是S串的子序列 思路:预处理S串,令pos[c]表示目前c最后出现的位置,dp[i][c]表示i后面第一次出现c的位置 对每个word判断时,只需要判断每个字符相对位置是否是0即可 代码:const int N = 50000 + 5;class Solution {...原创 2018-09-12 00:29:11 · 392 阅读 · 0 评论 -
HDU 3507 Print Article(斜率优化dp)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=3507 题意:N words,每个word有Ci,如果连续输出k个,那么代价就是求最少花费 这题用来入门斜率优化dp g[i,j] = getUP(i,j) / getDOWN(i,j) < sum[i] i的决策优于j的决策 斜率优化的地方: 设k<<j<<i,如果g[i,j]<<原创 2017-10-16 11:05:46 · 295 阅读 · 0 评论 -
leetcode 698. Partition to K Equal Sum Subsets(记忆化搜索/状压dp)
题目:https://leetcode.com/contest/leetcode-weekly-contest-54/problems/partition-to-k-equal-sum-subsets/ 题意:给你一个数组和k,问能否将数组分为k组,且k组数的和相等 思路:原创 2017-10-15 17:18:59 · 3143 阅读 · 0 评论 -
leetcode 10. Regular Expression Matching(dp)
题目:https://leetcode.com/problems/regular-expression-matching/description/ 题意:给你字符串s、p,让判断s是否符合p的正则匹配 ‘.’ Matches any single character. ‘*’ Matches zero or more of the preceding element. 思路:令dp原创 2017-10-14 16:04:53 · 267 阅读 · 0 评论 -
HDU 5115 Dire Wolf(区间dp)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=5115 题意:现在你面前有n只狼,杀死第i只狼会受到第i只狼的basic attack ai 和 extra attack bi-1 bi+1,让求将所有狼杀死受到的的最小攻击 思路:区间dp,类似“玲珑杯”ACM比赛 Round #7 D题 代码:#include<iostream>#i原创 2017-10-13 08:55:41 · 216 阅读 · 0 评论 -
HDU-1248 寒冰王座(完全背包)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1248思路:完全背包求最大价值代码:#include#include#include#includeusing namespace std;const int N = 50005;int v[N]={0,150,200,350},dp[N];int main(){ in原创 2016-03-22 22:21:25 · 533 阅读 · 0 评论 -
LightOJ 1232 Coin Change (II)(完全背包)
C - Coin Change (II)Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %lluSubmit Status Practice LightOJ 1232 DescriptionIn a strange shop there are n types of原创 2016-03-22 22:18:43 · 633 阅读 · 0 评论 -
HDU 6146 Pokémon GO(dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6146 思路: 设b[i]代表从某个角出发走遍所有格子回到同一列的方案数目 b[i] = b[i-1]*2 = 2^(n-1) 设a[i]代表从某个角出发走遍所有格子的方案数目 a[i] = b[i] + 2*a[i-1] + 4*a[i-2] 所以对于第i列,总数为4*(2*b[i-1]*a[n原创 2017-08-20 20:24:20 · 331 阅读 · 0 评论 -
51nod 1424 零树(树形dp)
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1424 思路:与上题相似,dp[u][1/0]代表将结点u所在联通块情况所需要的+1/-1的操作数 dp[u][1] = max(dp[son][1]) dp[u][0] = max(dp[son][0]) 然后再处理下情况所需要的差值 代码:#include原创 2017-08-10 10:02:59 · 313 阅读 · 0 评论 -
HDU-5904 LCIS(dp)
LCISTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 329 Accepted Submission(s): 144Problem DescriptionAlex has two sequences a1,a原创 2016-09-25 10:04:02 · 543 阅读 · 0 评论 -
百练 openjudge 开餐馆(动态规划)
4118:开餐馆总时间限制: 1000ms 内存限制: 65536kB描述北大信息学院的同学小明毕业之后打算创业开餐馆.现在共有n 个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n 个地点排列在同一条直线上。我们用一个整数序列m1, m2, ... mn 来表示他们的相对位置。由于地段关系,开餐馆的利润会有所不同。我们用pi 表示在mi 处开餐馆的利润。为了避原创 2016-08-01 22:28:59 · 2734 阅读 · 0 评论 -
最佳加法表达式(动态规划)
递归(带备忘的自顶向下法)/*题目:有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少子问题:将最后面的那个加号放在第i个数字的后面,计算前i个数字的最佳加法表达式状态:V(m,n)表示在n个数字中插入m个加号所能形成的表达式最小值*/#include#include#includeusing nam原创 2016-07-26 11:00:45 · 8009 阅读 · 8 评论 -
百练-4122 切割回文(动态规划)
子问题:假设j最优解切割,判断前j-1个所能达到的最少切割数加1与当前前i个的大小状态:dp[i]方程:dp[i] = min(dp[i],dp[j-1]+1);代码如下:/*子问题:假设j<i,j到i的字符串如果是回文,那么要判断是否切割按照最优解切割,判断前j-1个所能达到的最少切割数加1与当前前i个的大小状态:dp[i]方程:dp[i] = min(dp原创 2016-07-26 10:55:48 · 1456 阅读 · 0 评论 -
POJ-2677 Tour(双调欧几里得旅行商问题)(动态规划)
经典动态规划问题:双调欧几里得旅行商问题题意:给定平面n个点作为输入,希望你可以从最左端走到最右端,然后再返回到最左端,就是一个回路。要求经过所有点的最短回路j < i - 1时,d[i][j] = d[i-1][j] + dis(i-1,i)j = i-1时,d[i][j] = d[i][i-1] = min(d[i][i-1],d[k][j]+dis(i,k))原创 2016-07-26 10:50:35 · 1068 阅读 · 0 评论 -
POJ初级分类 贪心专题 poj1328 POJ2109 POJ 2586
题目1328代码及解释:/*POJ1328Radar Installation题目大意:有一条海岸线,一边是海岸,一边是大海;海中有一些小岛,我们要建造一些雷达,从而可以覆盖所有小岛,要求雷达的最小数目。思路:贪心法的套路。每次计算对小岛做一个半径为d的圆,如果与x轴有交点的话(如果有任何无交点的情况,输出-1),那么就用勾股定理计算出来算出来每个岛与x轴交点的两个坐标,分别是原创 2016-06-08 23:02:26 · 2712 阅读 · 1 评论 -
POJ初级分类 枚举专题 poj1753 poj2965
POJ1753题目大意:给你一个 4X4 的棋盘,每次操作你可以反转一个棋子,但是附加着把上下左右相邻的棋子也反转。 如果经过一定次数的操作可以使棋子变得全相同,就输出操作数;反之,就输出impossible。思路:想到了用0 1替换a、b,从而简化操作,然而对递归回溯并不是理解的很透彻,看的别人的代码才勉强写出来,太弱了,弱弱要变强!#include//POJ1753#i原创 2016-05-27 22:13:20 · 2616 阅读 · 0 评论 -
HDU 2955 Robberies(01背包)(动态规划)
RobberiesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 18375 Accepted Submission(s): 6797Problem DescriptionThe aspiring Roy th原创 2016-03-18 21:27:35 · 726 阅读 · 0 评论 -
POJ 1837 Balance(01背包 动态规划)
BalanceTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 12613 Accepted: 7903DescriptionGigel has a strange "balance" and he wants to poise it. Actually,原创 2016-03-23 11:41:27 · 573 阅读 · 0 评论