![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
ioo_2
这个作者很懒,什么都没留下…
展开
-
POj1458
最长公共子序列,我居然没看出来.以前遇到过,只是都交给队友啦,卡了一上午……….. dp[i][j]表示s1串从1到i,与s2串从1到j,这段里面的最长公共子序列为多少.\ dp[i][j]= dp[i-1][j-1] + 1, s1[i] == s2[j]; max { dp[i-1][j] , dp[i][j-1] } , s1[i]原创 2015-05-08 15:15:44 · 246 阅读 · 0 评论 -
POJ1014 多重背包
今天开始DP了,第一道多重背包,模板题,还是想了很久,太弱了…….. 题意:一行给出6个数,表示从1到6,6个不同权值的个数.求能否将所有权值不分割的分成权值相等的两份. 首先总权值为奇数的肯定不符合要求,接下来就是一个多重背包了. 多重背包的二进制拆分我的理解大概是; 首先将一个数按二进制拆分之后可以用拆分后的数相加得到小于或等于这个数的任意一个数.拆分之后得到许多小堆,接下来就只需要以堆原创 2015-05-04 21:04:06 · 372 阅读 · 0 评论 -
POJ1579
水题,没看到半点dp的影子.强行算是DP的话,公式已经给出来了,直接写就行了.#include <iostream>#include <cstring>#include <cstdio>using namespace std;int dp[25][25][25];int main(){ int i,j,k; memset(dp,0,sizeof(dp)); for(i原创 2015-05-05 20:12:30 · 336 阅读 · 0 评论 -
POJ2250
最长公共子序列,用map对输入的字符串进行处理之后就只是一个LCS了.最后通过递归求出路径就搞定了.#include #include #include #include #include #define MAXN 105using namespace std;int a[MAXN],b[MAXN];int tem[MAXN];int dp[MAXN][MAXN];int原创 2015-05-14 20:58:54 · 513 阅读 · 0 评论 -
POJ1953
对于一种不能出现连续的1的0-1串,长度为n时,有多少种可能的情况. 记录长度为i的时候,以1结尾的符合要求的串的数量num[i], 则dp[i]=num[i-1]+(dp[i-1]-num[i-1])*2; num[i]=dp[i-1]-num[i-1];#include <iostream>#include <cstring>using namespace std;int dp原创 2015-05-07 21:13:18 · 667 阅读 · 0 评论 -
ZOj 3471 Most Powerful 状态压缩DP
题意:N个具有能量的原子之间可以互相碰撞,碰撞之后会有一个原子消失并且放出一定的能量。给出原子i和原子j碰撞后原子j消失时释放的能量,求能够获得的能量之和最大为多少。 N<=10. 用0表示存在,1表示消失,则共有1<#include <iostream>#include <cmath>#include <algorithm>#include <cstring>using namespa原创 2015-11-07 14:46:05 · 270 阅读 · 0 评论 -
POJ 2288 Islands and Bridges 状态压缩DP
题意:给出n个岛和它们之间联通的m条路径,给出权值的计算方法,求权值最大哈密顿回路的权值和数量。 n<=13. 权值的计算方法为: 1.经过的所有点的权值之和; 2.经过的连续的两个点的权值的乘积; 3.能够组成三角形的三个点的权值的乘积。 根据岛是否走过最多有(1<<13)种状态。 dp[s][i][j] = max{ dp[s][i][j] , dp[s’][j][k] + tmp原创 2015-11-09 16:02:13 · 269 阅读 · 0 评论