题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1267题意:假定一个字符串由m个H和n个D组成,从左到右扫描该串,如果字符H的累计数总是不小于字符D的累计数,那么,满足条件的字符串总数。状态转移方程:dp[i+1][j]+=dp[i][j]//在后面加...
分类:
其他好文 时间:
2014-12-07 19:07:30
阅读次数:
105
1.基本概念
动态规划过程是:多阶段最优化决策的过程,每次决策依赖于当前状态,又随即引起状态的转移(即状态递推方程),一个决策序列就是在变化的状态中产生出来的,最终得到最优化的决策。
2.基本思想与策略
该算法通常基于一个递推公式(状态转移方程,即问题与子问题关系)及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。...
分类:
编程语言 时间:
2014-12-07 09:02:03
阅读次数:
184
解题思路:因为对于完全背包的状态转移方程f[v]=max(f[v],f[v-c[i]]+w[i])已经记录了所有背包组成的方案,只不过通常问的是求最大值,现在要求方案总数即为 f[v]=sum(f[v],f[v-c[i]+w[i]]),Problem Description在一个国家仅有1分,2分,...
分类:
其他好文 时间:
2014-12-07 08:59:43
阅读次数:
275
虽然是一道还是算简单的DP,甚至不用滚动数组也能AC,数据量不算很大。对于N个数,每个数只存在两个状态,取 和 不取。容易得出状态转移方程:dp[i][j] = dp[i - 1][j ^ a[i]] + dp[i - 1][j];dp[i][j] 的意思是,对于数列 中前 i 个数字,使得 XOR...
分类:
移动开发 时间:
2014-12-04 17:30:06
阅读次数:
197
题目链接:点击打开链接
题意: 一根长度为L 的木棒,要求要切割n次,给出n次需要切割的位置,每次切割花费为当前段的总长度。求最小花费。
思路:。。一开始想了好久也没往区间DP那方面想QAQ。设 dp[i][j] 为切割[i,j] 区间的最小花费,状态转移方程为 dp[i][j]=max(dp[i][k-1]+dp[k+1][j]+a[j+1]-a[i-1]);
#include
#inc...
分类:
其他好文 时间:
2014-12-04 01:10:36
阅读次数:
170
题目链接:点击打开链接
题意 :中文。。就不啰嗦了 大致就是n*m的格子上放置炮兵,相邻两格不能放,求最大放置个数。
思路:就是典型的状压啦,dp[i][j][k] 代表当前行状态为s[j],前一行状态状态为 s[k] 时的最大放置个数。状态转移方程可为
dp[i][j][k] =max(dp[i][j][k],dp[i-1][k][p]+sum[j]) (枚举上上行的状态p sum[j]...
分类:
其他好文 时间:
2014-12-03 21:29:00
阅读次数:
177
经典的最长公共子序列问题。状态转移方程为 :if(x[i] == Y[j]) dp[i, j] = dp[i - 1, j - 1] +1else dp[i, j] = max(dp[i - 1], j, dp[i, j - 1]);设有字符串X和字符串Y,dp[i, j]表示的是X的前i个字符与Y...
分类:
其他好文 时间:
2014-12-02 22:28:09
阅读次数:
197
数字三角形:定义状态(i,j):表示当前所处位置定义指标函数 d(i,j) :表示从格子(i,j)出发能得到的最大和找到状态转移方程: d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}总状态为O(n^2),每个状态决策为O(1),总的时间复杂度为O(n^2)。方法:直接递...
分类:
其他好文 时间:
2014-11-28 22:37:23
阅读次数:
295
题目大意:老板想要决定M个月每个月需要的工人数,已知雇佣一个工人的价格,
工人的月薪,解雇一个工人的价格,又知道M个月每个月至少需要多少个工人。问:
怎样雇佣工人,才能使得满足M个月工人需求的同时,付出最少的钱。
思路:在M个月中求出最大的需求人数Max,那么无论下个月需要多少个工人,最多
雇佣Max个工人也就够了。
状态转移方程:dp[i][j] = min(dp[i-1][k] + cost)(num[i-1] <=k <= Max)
意思是:第i个月雇佣j个人 = 当上个月雇佣k个人时的最小花费 + ...
分类:
其他好文 时间:
2014-11-27 12:49:50
阅读次数:
192
寻找a[1]..a[n]的最大上升子序列时,可以用的dp[]来记录最大的子序列长度,有状态转移方程: dp[i] = max{dp[j]}+1, 1(dp[j]+1)?dp[i]:(dp[j]+1); max=max>dp[i]?max:dp[i]; rerutn ...
分类:
编程语言 时间:
2014-11-26 01:21:47
阅读次数:
134