动态规划
yjyzsl
这个作者很懒,什么都没留下…
展开
-
poj1088 DFS深度搜索
#include #include using namespace std; int a[110][110],b[110][110],n,m; int d[4][2]={0,1,-1,0,0,-1,1,0}; int DFS(int i,int j) { int x,y; if(b[i][j]) return b[i][j]; else{原创 2012-08-13 16:36:03 · 438 阅读 · 0 评论 -
沙子合并 动态规划
链接网址:http://tyvj.cn/Problem_Show.asp?id=1055 #include #include using namespace std; const int MAX = 1005; const int INF = 0x7fffffff; int p[MAX],m[MAX][MAX],dp[MAX][MAX]; int n;//矩阵个数 v原创 2012-08-14 17:04:24 · 805 阅读 · 0 评论 -
hdu1028
概念:整数拆分: 所谓整数拆分即把整数分解成若干整数的和(相当于把n个无区别的球放到n个无标志的盒子,盒子允许空,也允许放多于一个球)。 整数拆分成若干整数的和,办法不一,不同拆分法的总数叫做拆分数。 链接网址: http://acm.hdu.edu.cn/showproblem.php?pid=1028 #include #include using name原创 2012-08-16 15:12:22 · 273 阅读 · 0 评论 -
0 1背包解题报告 poj3624
动态规划算法思想:设m[i][j]用来表示从前i项物品中区取出装入体积为j的背包的物品的最大价值。 其中i的范围为0到n,其中j的范围为0到c,程序要寻求的解为m[n][c]。可以分以下三种情况: ①m[0][j]对所有的j的值为0(物品种类为0), m[i][0]对所有的i的值为0(体积为0) ②当前的体积j大于等于w[i]时, m[i][j]是下面两个量的最大值:m[i-1][j](原创 2012-08-15 17:28:45 · 515 阅读 · 0 评论 -
poj2063 完全背包
这个算法使用一维数组,先看伪代码: for i=1..N for v=0..V f[v]=max{f[v],f[v-cost]+weight} 这是因为要保证第i次循环中的状态f[i][v]是由状态f[i-1][v-c[i]]递推而来。 换句话说,这正是为了保证每件物品只选一次,保证在考虑“选入第i件物品”这件策略时,依据的是一个绝无已经选入第i件物品的子结原创 2012-08-16 17:08:39 · 331 阅读 · 0 评论 -
poj1014 多重背包
链接网址:http://poj.org/problem?id=1014 #include #include #include using namespace std; int dp[60001]; void f(int sum,int n,int c[],int v[]) { int i,j,k,t; memset(dp,0,sizeof(dp原创 2012-08-16 08:44:03 · 250 阅读 · 0 评论 -
算法系列之五:最长公共子序列(LCS)问题(非连续子序列)的两种解法
算法系列之五:最长公共子序列(LCS)问题(非连续子序列)的两种解法 最长公共子序列也称作最长公共子串,英文缩写是LCS(Longest Common Subsequence)。其定义是:一个序列S,如果分别是两个或多个已知序列的子序列,且是符合此条件的子序列中最长的,则称S为已知序列的最长公共子序列。 关于子序列的定义通常有两种方式,一种是对子序列没转载 2012-08-27 09:54:17 · 760 阅读 · 0 评论 -
矩阵连乘 动态规划
动态规划——矩阵连乘的问题 链接网址:tyvj1198最有矩阵连乘 《问题的引出》 看下面一个例子,计算三个矩阵连乘{A1,A2,A3};维数分别为10*100 , 100*5 , 5*50 按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次 按此顺序计算需要的次数(A1*(A2*A3)):10X5X50+10X100X50=75000次 所原创 2012-08-14 11:10:48 · 429 阅读 · 0 评论