动态规划
oliver233
天道酬勤
展开
-
01背包
#include#includeint max(int a,int b){ return a>b?a:b;}int main(){ int i,j,t; int num,totle; int n; int weight[1000]; int value[1000]; int w[1000]; scanf("%d",&n); while(n--) { memse原创 2015-09-14 19:41:03 · 344 阅读 · 0 评论 -
矩阵乘法
#includeint main(){ int p[100]; int m[100][100]; int n; int a; scanf("%d",&n); for(a=0;a<=n;a++) scanf("%d",&p[a]); for(int i=1;i<=n;i++) m[i][i]=0;//本身不会自乘;代价为零。 for(int l=2;l<=n;l++)/原创 2015-09-14 19:42:32 · 451 阅读 · 0 评论 -
最长公共子序列
#include#includevoid Lcs(int i,int j,char *x,char *y,int b[][20]){ if(i==0||j==0) return ; if(b[i][j]==1) { Lcs(i-1,j-1,x,y,b); printf("%c",x[i-1]); } else if(b[i][j]==2) Lcs(i-1,j,x,y,原创 2015-09-14 19:46:40 · 382 阅读 · 0 评论 -
最长公共子序列问题
dp理解的一直不是很透彻,所以从最基础开始,就是最长公共子序列。这道题的dp思想很容易懂;当前字符的比较是基于前面比较的基础上。所以根据图可哟看出来然后写出状态转移方程简单的例题就是杭电acm的1159#include#includeint dp[5005][5005];char a[5005],b[5005];int max(int a,int b){原创 2015-10-21 17:14:43 · 317 阅读 · 0 评论 -
最长公共子串
上次经过dp解决公共子序列,然后找到同类型,最长公共子串,顾名思义,公共子串是连续的序列,做法和公共子序列相似,不过在不相等时要将前面计零,然后在判断中每次更新最大的子串,来看状态转移方程就差不多了;X[i] == Y[j],dp[i][j] = dp[i-1][j-1] + 1X[i] != Y[j],dp[i][j] = 0初始化i=0||j==0时,dp[i][j]=0;原创 2015-10-24 22:51:23 · 401 阅读 · 0 评论 -
最长递增子序列(三种方法求解)
最长递增子序列,顾名思义是找到序列中递增序列的最长长度。基本概念设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1方法一:排序并使用LCS求解基本思想:排序后原序列成为递增的序列,那么只需要找到和原来序列的最长公共子序列即可#include#includeint a[105];int b[105];int dp[105][105]={原创 2016-01-27 20:55:08 · 2475 阅读 · 0 评论 -
HDU2955(动态规划背包)
RobberiesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 17877 Accepted Submission(s): 6599Problem DescriptionThe aspiring Roy the Robb原创 2016-01-15 12:02:17 · 373 阅读 · 0 评论 -
hdu-2151 Worm
WormTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3880 Accepted Submission(s): 2507Problem Description自从见识了平安夜苹果的涨价后,Lele就在原创 2016-09-21 17:53:24 · 406 阅读 · 0 评论