动态规划
文章平均质量分 63
「已注销」
SYSU
展开
-
POJ 1088 滑雪
DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23原创 2010-01-19 21:36:00 · 1279 阅读 · 0 评论 -
POJ 1837 Balance(DP动态规划)
//DP,动态规划求组合数,dp[i][j]表示前i个重锤获得重量j有几种方式//转移方程dp[i][j+k] += dp[i-1][j];k为新添加第I个重锤的质量//对重锤对应钩子将其分组后来处理#include#include#includeusing namespace std;int dp[25][1000];int C[25],G[25];int N,M;const int mid = 500;void DP(){ dp[0][mid] = 1原创 2011-02-25 00:10:00 · 2262 阅读 · 0 评论 -
Sicily 1033 City Road(递推)
//模拟+递推,感觉这种题不能称之为动态规划,只能叫递推因为每个点只调用了一次,不存在所谓的转移//题意是从起点到终点,有多少种不同的走法,图中有些路有障碍//注意到规模是M*N #include#includeusing namespace std;int M,N,B;int x,y,dx,dy;bool X[2000000],Y[2000000];long long A[20原创 2010-12-27 20:00:00 · 2907 阅读 · 1 评论 -
POJ 1080 Human Gene Functions(动态规划——LCS问题变形)
//DP动态规划,LCS问题变形。根据LCS经典模型,我们就用dp[I,j]表示匹配到i和j的最优值.最终答案就是DP[LEN1][LEN2]//显然有两种情况://一、s1[i] == s2[j],也就是遇到相同字母的,状态转移自然是dp[i][j] = 5 + dp[i-1][j-1]//二、s1[i] != s2[j],遇到不同的呢,有这么几种匹配情况:// 1、硬将s1[i]和s2[j]匹配上去 // 2、不匹配,拿他们去和空格匹配,这样就有2种匹配方案//原创 2010-10-21 02:26:00 · 2361 阅读 · 0 评论 -
Sicily 1828 Minimal(动态规划)
//动态规划//这题的关键在于先排序,只有先排序,后面动规的思路才能出来,我就是想不到得先排序,卡了好久还得别人提醒//我是NC不解释//题意是对2个集合寻找N对数对,使得数对的距离之和最小//如果你先排好序,那么用DP(i,j)表示A集合的前i个点与B集合前j个点的最优值//那么对于第i+1个A集合的点而言,他的最优解就是前i个点与B集合前j个点的最优值加上第i+1个点与第j+1个点的距离//或许i+1与j+1配对不是最好的,它可能比上一个状态DP(i+1,j)要差//综上原创 2010-09-29 01:14:00 · 3523 阅读 · 0 评论 -
POJ 1160 Post Office(动态规划)
//经典动态规划//dp(i,j)表示用i个邮局,从1到j村庄的最优解//dis(i,j)表示只用1个邮局从i到j村庄的最优解,显然取i,j中点的村庄作为邮局点是最优的//动态转移方程:dp(i,j) = min{dp(i-1,k) + dis(k+1,j)}(i #define INF 1000000000using namespace std;int d[305];int dp[35][305],dis[305][305];int n,m;void init(){原创 2010-09-07 16:09:00 · 3380 阅读 · 0 评论 -
POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
//Floyd + 状态压缩DP//题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短//也就是TSP(旅行商)问题,首先不难想到用FLOYD先求出任意2点的距离dis[i][j]//接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过//定义状态DP(S,i)表示在S状态下,到达城市I的最优值//接着状态转移方程:DP(S,i) = min{DP(S^(1#define INF 100000000原创 2010-09-17 14:11:00 · 4987 阅读 · 0 评论 -
POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)
//动态规划//设S[i,k]表示第i种花束摆在第k个之前(包括第k个)的任意某个花瓶中,前i种花束能够获得的最大美学值(之和)//原问题的最优值即为S[F,V]//S[i,k] = max{S[i-1,k-1]+A(i,k),S[i,k-1]},(i>1,k>i);//初始条件为://S[1,1] = A[1,1]; //S[1,k] = max{A(1,k),S[1,k-1]},(k>1);//S[i,i] = S[i-1,i-1]+A(i,i), (i>1) //要点,原创 2010-09-09 23:01:00 · 849 阅读 · 0 评论 -
POJ 1661 Help Jimmy(动态规划)
//动态规划//将板按高度排序//记录到达每块板的左右端点所需的最少时间,和每块板从左右两边跳下去的下一块板指针//从高到低不断迭代更新最少时间所需值//注意边缘处理和直接落地的情况以及满足最大跳楼高度这些条件#include#include#define INF 1000000000;using namespace std;struct Plat{ int x,y,h; int R_next;//从右端点掉下去的下一块板 int L_next;//从左端原创 2010-07-07 01:47:00 · 675 阅读 · 0 评论 -
Sicily 1146 采药(DP动态规划——01背包问题)
//传统非滚动数组实现形式#include#includeusing namespace std;int s[1000][1000];int main(){ int T,M,t,v,_max = -1;//T为时间上限(背包容量),M为药草份数(物品总数) scanf("%d%d",&T,&M); for(int i = 1;i <= M;++i) {原创 2010-04-22 00:06:00 · 3775 阅读 · 1 评论 -
Sicily 1091 Maximum Sum(动态规划)
//动态规划//dp1[i]数组表示从左往右以i为终点最大连续和//dp2[i]数组表示从右往左以i为终点最大连续和//dp3[i]数组表示从右往左记录下到当前位置能取到的最大值,即记忆化,使调用该值不必再次循环//最终最大值_max = max(dp1[i] + dp3[i+1])//arr: 1,-1,2,2,3,-3,4,-4,5,-5//dp[1]: 1, 0,原创 2010-03-29 01:13:00 · 2077 阅读 · 4 评论 -
POJ 2533 Longest Ordered Subsequence(DP动态规划)
//DP动态规划,求最长上升子序列#includeint arr[1001],d[1001],len,max = 1;//最大值应初始化为1,因为最小值是1.当只有1个数据是输出1.int main(){ for(int i = 1;i <= 1000;++i) d[i] = 1;//将DP数组初始化为1 scanf("%d",&len); for(int i =原创 2010-03-04 00:17:00 · 719 阅读 · 0 评论 -
【转】背包九讲
P01: 0-1背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max转载 2010-03-03 22:08:00 · 860 阅读 · 0 评论 -
POJ 3624 Charm Bracelet(DP动态规划+滚动数组)
#include#includeusing namespace std;int f[15000];int max(int a, int b){ return a >b ? a: b;}int main(){ int maxd = -1,n,m,w,d; scanf("%d%d",&n,&m); //滚动数组 memset(f,0,sizeof(f原创 2010-03-03 23:23:00 · 885 阅读 · 1 评论 -
Dynamic Programming(DP)---动态规划
一、概念及意义 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转载 2009-12-23 00:35:00 · 994 阅读 · 0 评论 -
动态规划——最大连续子段和
最近在学习动态规划,将自己的所思所想所得记录下来,检验自己是否真正懂了。 问题描述:给定一个数组,记录一串数字,可正可负,现要求出其中最大的连续子段和。 用数组A[N]记录所要求的数组,用数组B[N]来记录连续子段和的状态通过分析,可以知道:当B[K]>0时,无论B[K]为何值,B[K]=B[K-1]+A[K]当B[K] 故动态转移方程便可得出B[K]原创 2009-12-19 23:21:00 · 6765 阅读 · 0 评论 -
POJ 1593 World Cup Noise(DP动态规划)
//DP动态规划,斐波那契数列模型。设f(n)为结果//假设f(1),f(2)已知,下证明f(n) = f(n-1) + f(n-2)//对于f(n-1)的排列,在其后添0,没有1相邻//若要添1不冲突,则只需考虑f(n-2)的排列即可,在f(n-2)的排列后添0再添1,则没有1相邻//故f(n) = f(n-1) + f(n-2)//最后注意输出格式,每个test case原创 2010-02-17 22:30:00 · 1030 阅读 · 0 评论 -
POJ 1050 To the Max (动态规划——求最大子矩阵和)
DescriptionGiven a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle原创 2010-01-20 03:17:00 · 1909 阅读 · 2 评论 -
POJ 2817 WordStack(状态压缩DP)
<br />#include<iostream>#include<cstdio>#include<cstring>using namespace std;int pow[15];int dp[1<<12][10],N;char word[15][25];int W[15][15];void init(){ int w; memset(W,0,sizeof(W)); for(int i = 0;i < N;++i) { for(int j = 0;j原创 2011-02-27 14:13:00 · 2425 阅读 · 0 评论