DP
文章平均质量分 73
pmt123456
这个作者很懒,什么都没留下…
展开
-
hdu1142(dijastra+记忆化搜索)
题目链接A Walk Through the Forest记忆化搜索介绍 hdu1078如果从B到home的路比任何从home到A的路要短,那么久有一条A从到B的路,计算一个可以由几条路如图dfs(1)⑴ A->2,return 1, p[A]+=1 p[1]+=1 ===>p[A]=1 p原创 2016-12-05 19:49:27 · 354 阅读 · 0 评论 -
hdu1158(dp)
题目链接Employment Planning雇佣工人,每个工人每个月有一定的工资,雇佣和解雇都要花费一定的钱每个月规定了至少要多少工人,求一年最少的花费状态转移方程 dp[i][j]=min(dp[i][j],dp[i-1][k]+trans(k,j)+j*salary);表示第i个月雇佣j个工人需要的最少钱数,trans(k,j)表示从k个人变成j个月的花费原创 2016-12-05 20:49:24 · 313 阅读 · 0 评论 -
hdu1087(DP)
题目链接Super Jumping! Jumping! Jumping!给定一个序列,每个序列代表这个点的分数,只有当j的分数状态转移方程if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+a[i]);代码#include #include #include using namespace std;const int maxn=1005;int d原创 2016-11-26 10:41:19 · 354 阅读 · 0 评论 -
hdu1080(最长公共子序列变形)
给定一个相似性矩阵给定两个基因序列(由AGCT组成),填充空格‘ ’,使得相似性分数最高状态转移,其中dp[i,j]表示s1[i]和s2[j]处能取到的最大分数(i=1,2,3...len1,j=1,2,3,..,len2)dp[i,j]=max(max(dp[i-1,j-1]+table[i,j],dp[i,j-1]+table[i]['-']),dp[i-1,j]+table[原创 2016-11-26 13:12:55 · 566 阅读 · 0 评论 -
hdu1078(记忆化搜索)
题目链接FatMouse and Cheese一个网格上有很多cheese,老师偷cheese吃,每次四邻域最多走k步,下一步的cheese数必须必当前位置多,求能吃到的最多cheese记忆化搜索原创 2016-11-26 14:10:50 · 407 阅读 · 0 评论 -
hdu1160(最长上升子序列变形)
最长上升子序列变形状态转移方程if(mice[j].w>mice[i].w&&mice[j].s<mice[i].s){ if(dp[i]<dp[j]+1){ dp[i]=dp[j]+1; pre[i]=j; } }代码原创 2016-12-08 20:58:15 · 1789 阅读 · 0 评论 -
hdu1176(DP)
题目链接:免费馅饼接馅饼,最开始在5,每秒只能移动一个单位,每次只能接住当前位置的馅饼状态转移方程dp[pos][t]=max(dp[pos][t-1],max(dp[pos-1][t-1],dp[pos+1][t-1]))+pie[pos][t];dp[pos][t]表示在pos点,第t秒能接到的最多馅饼几个注意:1.pos取1-11,这样可以避免原创 2016-12-08 21:31:37 · 230 阅读 · 0 评论 -
hdu1024(母函数打表/完全背包打表)
题目链接:钱币兑换问题题目大意:中文题目题目分析:1、典型母函数(注意b[j]的初始化和每次赋0) 2、完全背包变形:dp[v]+=dp[v-c[i]];代码:1、母函数#include const int maxn=32768+5;int main(){ //freopen("in.txt","r",std原创 2017-01-12 00:26:03 · 316 阅读 · 0 评论 -
hdu 1025
要求路不能交叉,画图就知道了,一顺边的路最多,最大上升子序列事实告诉我们,没事不要cout和cin,TLE半天,以为下界求错了。。。只需要长度,没必要多开一个数组记录路径#include #includeusing namespace std;const int maxn= 500000+5;int d[maxn];int road[maxn];int bisearch(原创 2016-09-29 10:06:11 · 270 阅读 · 0 评论 -
hdu1074 状态压缩DP
有n门课,给定每门课要花费的天数C和时限D,如果超过规定时间完成,每超过一天就会扣1分,问怎样安排做作业的顺序才能使得所扣的分最小N枚举所有状态i(1对于第j门课,if(i&(1那么i可以由状态i^(1!!注意题目要求字典序,所以状态转移方程要取等号dp[i]>=dp[lastState]+delay这是因为j是从1->n的,所以是1#include原创 2016-11-18 10:12:14 · 374 阅读 · 0 评论 -
hdu1069 dp最长单调序列
有n中不同的长方体,每种个数不限,叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长和宽短;求这些长方体能叠加的最高的高度,每种长方体都可以翻转,xyz可以翻转成xzy,yxz,yzx,zxy,zyx思路和最长子序列差不多,求最大能得出的最大高度了。#include #include #include using namespace std;c原创 2016-11-17 10:28:07 · 356 阅读 · 0 评论 -
hdu1003最大连续子段和
此题有o(n3)和o(n2)的做法,可定是TLE的1.dpd[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i],其中d[i]是以第i个元素结尾,的最大子段和。试想,如果此时d[i-1](1)d[i-1]>0, a[i]>0肯定是划算的(2)d[i-1]=4 ,a[i]=-7,a[i+1]=11,那么加上a[i]就很划算,因为你能获得a[i+1]原创 2016-09-17 09:22:17 · 685 阅读 · 0 评论 -
hdu1024(动态规划+滚动数组优化)
把一个数组分成m段, sum(i1, j1) + sum(i2, j2) + sum(i3, j3) + ... + sum(im, jm),求使得上述和最大,ik,jk是连续的jk和ik+1可以不连续动态规划,d[i][j]表示在选取第j个数字的情况下,将前j个数字分成i组的最大和,则它的值有两种可能①(x1,y1),(x2,y2)...(xi,yi,num[j])②(x1,y原创 2016-09-28 23:58:14 · 8586 阅读 · 7 评论 -
hdu1054 最小点覆盖/树形DP
题目链接:Strategic Game两种做法(1)最小点覆盖=最大匹配(匈牙利)#include #include #include using namespace std;const int maxn = 1505;bool vis[maxn];int link[maxn];vectorg[maxn];int n;int dfs(int u){原创 2016-11-15 10:34:21 · 562 阅读 · 0 评论