1. 程式人生 > 其它 >基礎動態規劃

基礎動態規劃

例1:
題目:

從左下走到右上有多少種走法

#include<stdio.h>
int a[7][7];
int main()
{
    a[5][1]=1;
    for(int j=1;j<=5;j++)
    {
        for(int i=5;i>=1;i--)
        {   if(i==5&&j==1)
             a[i][j]=1;
             else
            a[i][j]=a[i+1][j]+a[i][j-1];//每個狀態都只能從左和下來
        }
    }
    
for(int i=1;i<=5;i++) { for(int j=1;j<=5;j++) { printf("%d ",a[i][j]); } printf("\n"); } printf("%d\n",a[1][5]); }

例2:
題目:
數字矩陣從左上到右下,每個格子的權值不同

for(int j=1;j<=m;j++)
    f[1][j]=a[i][j]+f[1][j-1];
for(int i=2;i<=n;i++)
{
    for(int
j=1;j<=m;j++) { f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j]; } }

例3:
題目:

    f[0][0]=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=v;j>=w[i];j--)
        {
            f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+p[i]);
        }
    }