POJ 3176 Cow Bowling (簡單dp——數塔問題)
阿新 • • 發佈:2019-01-25
題意:其實就是數塔問題,找出一條加和最大的路徑,輸出最大和;
題解:data[i][j]=max(data[i-1][j],data[i-1][j-1])+data[i][j];
突然發現只用一個數組就行,以前一直在用兩個陣列= =
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { int i,j,t,n,data[351][351]; while(~scanf("%d",&n)) { memset(data,0,sizeof(data));//初始化陣列,清零 for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { scanf("%d",&data[i][j]); data[i][j]=max(data[i-1][j],data[i-1][j-1])+data[i][j];//求出第i行第j個數的最優解 } } for(i=1,t=data[n][0];i<=n;i++)//在最後一行中找出最大的輸出 if(t<data[n][i]) t=data[n][i]; cout<<t<<endl; } return 0; }