动态规划
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
限制条件: 1<=n<=100,0<=S<=10000,1<=Vi<=S
状态转移方程: f(i)=min(INF,f(i-Vj)+1|Vj<=i)
g(i)=max(-INF,g(i-Vj)+1|Vj<=i)
其中f(i)和g(i)分别代表面值之和恰好为i时,硬币数量的最大值和最小 值, f(0)与g(0)初始值设为0。
最长公共子序列问题
题目大意:
给定两个字符串s1s2…sn和t1t2…tn。求出这两个字符串最长的公共子序列 的长度。
限制条件: 1<=n,m<=1000
状态转移方程: 如果si==ti , dp[i][j]=max(dp[i-1][j-1]+1,dp[i][j-1],dp[i-1][j])
最终答案
满足dp[n][j]<=W的最大j
谢谢
01背包问题之2
题目大意:
有n个重量和价值为wi,vi的物品。从这些物品中挑选出总重量不超过W的物品, 求所有挑选方案中价值总和的最大值。
限制条件: 1<=n<=100 1<=wi<=10^7
1<=vi<=100
1<=W<=10^9
状态转移方程:
dp[i][j]=min(dp[i-1][j],dp[i][j-v[i]]+w[i]);
wk.baidu.com
状态转移方程: dp[i][j]初始值为dp[i-1][j],即k=0状况 dp[i][j]=max(dp[i-1][j-k*w[i]]+k*v[i]|0<=k, dp[i][j])
for(i=1; i<=n; i++) { for(j=0; j<=c; j++) { for(int k=0; k*w[i]<=j; k++) dp[i][j]=max(dp[i][j],dp[i-1][j-k*w[i]]+k*v[i]);//表示前i-1种物品中选取若干件物品放入剩余空 } }
题目大意:
有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌 套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例 如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽 可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个 矩形内。
如果si!=ti , dp[i][j]=max(dp[i][j-1],dp[i-1][j])
完全背包
题目大意:
有n种重量和价值分别为wi,vi的物品。从这些物品中挑选总重量不超过W的 物品,求出挑选物品价值总和的最大值。在这里,每种物品可以挑选任意多件。 限制条件: 1<=n<=100 1<=wi,vi<=100 1<=W<=10000
动态规划
BY HYLIU
POJ1163
在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的 数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个 最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字 为 0 - 99
动规解题的一般思路
将原问题分解为子问题 确定状态 确定一些初始状态(边界状态)的值 确定状态转移方程
限制条件:
n<=1000,0<=a,b<=100 网址:http://acm.nyist.net/JudgeOnline/problem.php?pid=16
按照矩形的短边进行排序 状态转移方程:
d(i)=max{0,d(j),矩形j可以嵌套在矩形中}
硬币问题
题目大意:
有n种硬币,面值分别为V1,V2,V3,….,Vn,每 种硬币有无限多。给定非负整数S,可以选用多少个硬币,使 得面值之和恰好为S?输出硬币数量的最小值和最大值。
状态转移方程: d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}
01背包问题
题目大意:
有n个重量和价值为wi,vi的物品。从这些物品中挑选出总重量不超过W的 物品,求所有挑选方案中价值总和的最大值。
限制条件: 1<=n<=100 1<=wi,vi<=100 1<=W<=10000
状态转移方程: 当j<w[i]时dp[i][j]=dp[i-1][j] 当j>=w[i]时 dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])
初始化dp[0][j]=0,其中dp[i][j]表示取到第i个物品使用重量为j 的最大价值为多少。
嵌套矩形(nyoj16)