动态规划三种方法
以數字三角形為例。
求出一個數字三角形從上到下一條路徑的結點總值最大
1.遞歸計算
int solve(int I,int j){ return a[I][j]+(I==n?0:max(solve(I+1,j),solve(I+1,j+1))); }這種方法對于這題來說效率有點低了,因為重復計算了已經計算過的結點。從上到下。
2.遞推計算
這個是從下到上
int I,j; for( j=1;j<=n;j++)d[n][j]=a[n][j]; for( I=n-1;i>=1;i--)for( j=1;j<=I;j++)d[I][j]=a[I][j]+max(d[I+1][j],d[I+1][j+1]);3.記憶化搜索
這個就是從上到下的改進版,重復計算過的結點存儲起來,可以直接用
memset(d,-1,sizeof(d)); int solve(int I,int j){if(d[I][j]>0)return d[I][j];d[I][j]=a[I][j]+(I==n?0:max(solve(I+1,j),solve(I+1,j+1))); }?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: uva1624knots
- 下一篇: uva1025