
------------动态规划------------
yphacker
心之所动,且就随缘去吧
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU1423 Greatest Common Increasing Subsequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423 解题思路: 最长公共递增子序列,如果不懂的话,还是看这个人的讲解:http://www.cnblogs.com/xkfz007/archive/2012/10/17/2728728.html AC代码: #include #include #include using n原创 2014-12-04 19:43:08 · 364 阅读 · 0 评论 -
hihoCoder 1048 状态压缩·二
#include #include #include #include #define N 1<<5 #define MOD 1000000007 using namespace std; int n,m; typedef long long ll; ll dp[2][N]; bool full[N]; bool check(int num){ while(num){原创 2015-08-01 10:03:23 · 687 阅读 · 0 评论 -
hihoCoder 1051 补提交卡
#include #include #include #include using namespace std; int main(){ int T; scanf("%d",&T); while(T--){ vector v; int n,m,maxn = 0,a; scanf("%d%d",&n,&m);原创 2015-08-01 16:10:05 · 386 阅读 · 0 评论 -
hdu 5313 Bipartite Graph
官方题解: 首先二分图可以分成两类点XX和YY, 完全二分图的边数就是|X| \cdot |Y|∣X∣⋅∣Y∣.我们的目的是\max {|X| \cdot |Y|}max{∣X∣⋅∣Y∣}, 并且|X| + |Y| = n∣X∣+∣Y∣=n. 把原图黑白染色, 每个联通块有a_iai个黑点, b_ibi个白点, 于是就是要确定a_iai属于XX还是属于原创 2015-08-02 23:28:28 · 394 阅读 · 0 评论 -
hdu 5389 Zero Escape(dp类似背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5389 解题思路: 题目大意: 有A和B两个门,每个门上有一个数字,现在有n个人,每个人手里也有一个数字,现在n个人都要选择一个门进去,要求计算门内的 人的数字每一位的和,一直累加到一位。这个数和门代表的数字是相同的。问n个人有多少种走法。 算法思想: 数字根直接mod 9就行了,随原创 2015-08-29 18:48:01 · 457 阅读 · 0 评论 -
ZOJ 2604 Little Brackets(高精度+dp)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2604 解题思路: 用dp[n][k]表示长度为2n深度不超过k的括号序列个数,那么答案就是dp[n][k]-dp[n][k-1]。 边界条件:dp[0][j] = 1递推公式:dp[i][j] = sum{dp[i-k][j] * dp[k-原创 2015-08-31 09:11:40 · 591 阅读 · 0 评论 -
hdu 4283 You Are the One(记忆化搜索,区间dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4283 解题思路: 题目大意:n个人排队上台,每个人都有个屌丝值Di,每个人的不高兴值为:(在他前面上台的人的个数)*(他的屌丝值)。现在有一个小黑屋:导演可以把让一个人进人小黑屋,让他之后的人比他先上台,最先进入小黑屋的人最后离开。(一个人只能进入一次小黑屋)。问所有人的不高兴值的总和最少原创 2015-09-09 22:18:42 · 561 阅读 · 0 评论 -
hdu 4405 Aeroplane chess(概率dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 解题思路: 题目大意: 并排的0~n的格子,起始点在0,每次向前走时都要掷骰子1~6,得到x,之后往前走x步,还有一些特殊的连接xi,yi, 如果到达xi就直接跳到yi不用掷骰子,求到达>=n掷骰子的次数的期望。 算法思想: 求概率正推,求期望反推。 式子很明显,E(w) 表示原创 2015-09-08 21:26:24 · 347 阅读 · 0 评论 -
hdu 4722 Good Numbers(找规律,记忆化搜索,数位dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4722 解题思路: 题目大意: 给你两个数a,b(a 算法思想: 先枚举一下0~200内满足条件的值,0,19,28,37,46,55,64,73,82,91,109,118,127,136,145,154,163,172,181,190.规律很显然就出来了,0~10中有一个,10原创 2015-09-06 20:19:54 · 690 阅读 · 0 评论 -
hdu 5119 Happy Matt Friends(dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5119 解题思路: 题目大意: n个数,从中挑k个,使得这k个数的异或和不小于m,问有多少种挑选方法。 算法思想: dp[i][j]表示前 i 个数中选择一些使得异或和为j的方法数,转移方程:dp[i][j] = dp[i - 1][j] + dp[i - 1][j ^ a[i]],即原创 2015-09-17 18:53:26 · 449 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus(滚动数组)(DP)
Max Sum Plus Plus 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1024 解题思路: 给你一个数组,求其分成m个不相交子段和最大值的问题。 设a为给定数组,n为数组中的元素总数,dp[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值,其中1 状态转移方程为: dp[i][j] = max(dp[i][原创 2016-03-09 22:43:47 · 330 阅读 · 0 评论 -
hihoCoder 1044 状态压缩·一
#include #include #include #include #define N 1025 using namespace std; int dp[2][N]; int w[N]; int cn[N] = {0,1,1}; const int num[] = {1,2,4,8,16,32,64,128,256,512,1024}; int main(){ int n,原创 2015-07-31 23:47:28 · 832 阅读 · 0 评论 -
hihoCoder 1055 刷油漆
#include #include #include #include using namespace std; struct node{ int next,to; }tree[110]; int n,m; int dp[110][110]; int head[110]; void dfs(int x){ int p = head[x]; int i,j;原创 2015-08-01 16:50:40 · 771 阅读 · 0 评论 -
HDU1159 Common Subsequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 解题思路: 基本的最长公共子序列,不懂的请看这个人的博客:http://www.cnblogs.com/xkfz007/archive/2012/10/17/2728728.html AC代码: #include #include #include using names原创 2014-12-04 19:39:04 · 430 阅读 · 0 评论 -
HDU1257 最少拦截系统
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257 解题思路: 最长递增子序列,感觉只是把最长公共递增子序列变了一个形而已,其实实质都是一样的。 AC代码: #include #include #include using namespace std; int main() { int n; while(s原创 2014-12-04 20:08:09 · 717 阅读 · 3 评论 -
POJ1163 The Triangle
题目链接:http://poj.org/problem?id=1163 解题思路: 简单的dp。 AC代码: #include #include #include using namespace std; int main() { int n; int dp[110][110]; int maze[110][110]; while(scanf原创 2014-12-06 00:43:39 · 340 阅读 · 0 评论 -
2010年山东省第一届ACM大学生程序设计竞赛——Clockwise
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2153 Clockwise 只要理解题目意思,即可敲出正确代码。 题目大意为:给你n个点,让你求出任意一个向量,顺时针旋转180(不能到达180),如果可以达到其余n-2个点,就输出‘C’,逆时针旋转180,如果可以到达n-2个原创 2015-04-28 21:26:37 · 722 阅读 · 0 评论 -
2013年山东省第四届ACM大学生程序设计竞赛——Mountain Subsequences
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607 题目大意: 给你一个长度为n的字符串仅由小写英文字母组成,求满足 a1 aj > aj+1 > ... > an 的子串的个数,其实也就是统计所有满足以某一元素为中心左边递增,右边递减的子串的数目,要求该子串原创 2015-05-08 22:18:01 · 605 阅读 · 0 评论 -
HDU3339——In Action
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3339 In Action 题目大意:给你n个点,每个点都有一个power值,再给你m条路(路之间代表油费),求从0出发到某些点 使得 油量消耗最少且power值达到一半。 可以floyd或者spfa求出0到各点的距离 dis[ maxm ]。 然后就可以转化原创 2015-05-06 22:34:31 · 436 阅读 · 0 评论 -
HDU5234 Happy birthday && BestCoder Round #42
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5234 解题思路: DP题。类似于背包,Dp[i][j][k]表示在第(I,j)个格子背包容量为k的时候的最大值。 Dp[i][j][k]=max(dp[i−1][j][k],dp[i][j−1][k],dp[i−1][j][k−w[i][j]]+w[i][j],dp[i][j−1][k−w[i原创 2015-05-24 10:58:33 · 538 阅读 · 0 评论 -
hdu 5418 Victor and World(旅行商问题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5418 解题思路: 旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Da原创 2015-08-24 16:43:28 · 1485 阅读 · 0 评论 -
hdu 5410 CRB and His Birthday(01背包+完全背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5410 解题思路: 首先考虑b[i]存在的情况,b[i]只会出现在第一次购买商品的时候用上,用01背包处理,然后01背包处理完后,接着跑一遍多重背包,这次仅考虑a[i]对最终结果的影响,最终输出dp[m]即为最终结果。 为什么可以这样呢?因为01背包仅仅是考虑第一次买的情况,在01背包之后原创 2015-08-25 15:30:11 · 801 阅读 · 0 评论 -
hdu 5396 Expression(区间dp+组合数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5396 解题思路: 题目大意: 题目大意:有n个数,和n-1个符号('+','-','*')形成一个表达式,现在问对于不同的运算序列,得到的结果的总和是多少(结果为非负整数,对1e9+7取余) dp[i][j]记录在区间l到r内的各种不同的运算序列的结果的和。 官方题解:原创 2015-08-26 18:43:02 · 615 阅读 · 0 评论 -
hdu 5366 The mook jong(递推)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5366 解题思路: 官方题解: 令f[i]为最后一个木人桩摆放在i位置的方案,令s[i]为f[i]的前缀和。很容易就能想到f[i]=s[i-3]+1,s[i]=s[i-1]+f[i],而s[n]即是所求答案。本题唯一一个值得注意的点就是当n接近60时会爆int 用dp[i]表示第i种原创 2015-08-13 10:55:46 · 461 阅读 · 0 评论