动态规划三种方法
以數(shù)字三角形為例。
求出一個(gè)數(shù)字三角形從上到下一條路徑的結(jié)點(diǎn)總值最大
1.遞歸計(jì)算
int solve(int I,int j){ return a[I][j]+(I==n?0:max(solve(I+1,j),solve(I+1,j+1))); }這種方法對(duì)于這題來(lái)說(shuō)效率有點(diǎn)低了,因?yàn)橹貜?fù)計(jì)算了已經(jīng)計(jì)算過(guò)的結(jié)點(diǎn)。從上到下。
2.遞推計(jì)算
這個(gè)是從下到上
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.記憶化搜索
這個(gè)就是從上到下的改進(jìn)版,重復(fù)計(jì)算過(guò)的結(jié)點(diǎn)存儲(chǔ)起來(lái),可以直接用
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))); }?
超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
- 上一篇: uva1624knots
- 下一篇: uva1025