基礎動態規劃
阿新 • • 發佈:2021-06-12
例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(intj=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]); } }