摘要: http://poj.org/problem?id=1163因为要求的是最大的路径和,那就开个数组存储,然后从倒数第二行开始计算,每条路径上要保留左右子树上的最大数再加上本身的数,然后保留在本身结点位置,可避免重复计算转移方程num(i,j)=max(num(i+1,j),num(i+1,j+1))+num(i,j);#includeint max(int a,int b){ return a>b?a:b;}int main(){ int num[101][101],sum,i,j; scanf("%d",&sum); for(i=0;i=0;i--) ... 阅读全文
posted @ 2013-08-06 21:18 执着追求的IT小小鸟 阅读(141) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1331dp打表就是这么个过程了 1 #include 2 #include 3 int main() 4 { 5 int i,j,k,a,b,c; 6 int w[21][21][21]; 7 for(i=0;i20||b>20||c>20)k=w[20][20][20];19 else k=w[a][b][c];20 printf("w(%d, %d, %d) = %d\n",a,b,c,k);21 }22 return 0;23 } Vi... 阅读全文
posted @ 2013-08-06 20:42 执着追求的IT小小鸟 阅读(171) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1159这题可用递归解出(1)递归方法求最长公共子序列的长度 1)设有字符串a[0...n],b[0...m],下面就是递推公式。 当数组a和b对应位置字符相同时,则直接求解下一个位置;当不同时取两种情况中的较大数值。 #include//会超时 #includechar a[100000],b[100000];int lena,lenb;int LCS(int i,int j){ if(i>=lena || j>=lenb) return 0; if(a[i... 阅读全文
posted @ 2013-08-06 17:09 执着追求的IT小小鸟 阅读(184) 评论(0) 推荐(0) 编辑