王道机试指南读后总结-6(动态规划等)

来源:互联网 发布:淘宝客服对话 编辑:程序博客网 时间:2024/06/05 11:21

递推求解:

N阶楼梯上楼问题。一次可走一阶或两阶,问有多少种上楼方式。
这同时也是裴波那契数列问题,当N>2时,走最后一次有两种情况,分从N-1到N和N-2到N,则F(N)=F(N-1)+F(N-2)。

错排问题:
  错排公式为F(N)=(N-1)*F(N-1)+(N-1)*F(N-2),N个信封,N个信,N个信封中的信全部装错的种类。

动态规划:

最长递增子序列(LIS):
//dpint num[51]; //整个序列int dp[51];//存储了每个数字之前的最长递增子序列长度for(i=1;i<50;i++){nmax=1;  //每个最小是1for(j=1;j<i;j++){  //遍历之前所有数字if(a[j]<a[i])nmax=max(nmax,dp[j]+1);  //若dp[j]+1大于当前最长子序列,更新}dp[i]=nmax;  //遍历完一个数字之前的序列,把最大长度存入}//之后最大值其实和最后一个dp相等

最长公共子序列(LCS):

//char s1[101],s2[101]; //两个字符串int dp[101][101];  //存最长公共子序列长度for(i=0;i<101;i++)dp[i][0]=0;for(j=0;j<101;j++)dp[0][j]=0;for(i=0;i<101;i++){for(j=0;j<101;j++){  //用二重循环求得每个dp[][]的值if(s1[i]!=s2[j]) //如果两个字符不等dp[i][j]=max(dp[i-1][j],dp[i][j-1]);elsedp[i][j]=dp[i-1][j-1]+1; //若它们相等,则加一}}



0 0
原创粉丝点击