TYVJ 1079 数字三角形2 by C++
1 #include<iostream> 2 using namespace std; 3 const int maxn=30; 4 int n,px,py; 5 int a[maxn][maxn],f[maxn][maxn]; 6 7 void get_prepare() 8 { 9 cin >> n; 10 for (int i=0;i<n;i++) 11 for (int j=0;j<=i;j++){ 12 cin >> a[i][j]; 13 f[i][j]=a[i][j]; 14 } 15 px=n/2; 16 py=--px; 17 for (int i=0;i<=px;i++) {if (i!=py) a[px][i]=-65536;} 18 } 19 20 int answer() 21 { 22 for (int i=1;i<n;i++) 23 for (int j=0;j<=i;j++){ 24 if (f[i-1][j]+a[i][j]>f[i][j]) f[i][j]=f[i-1][j]+a[i][j]; 25 if (j-1>=0 && f[i-1][j-1]+a[i][j]>f[i][j]) f[i][j]=f[i-1][j-1]+a[i][j]; 26 } 27 int max=0; 28 for (int i=0;i<n;i++) if (f[n-1][i]>max) max=f[n-1][i]; 29 return max; 30 } 31 int main() 32 { 33 get_prepare(); 34 cout << answer() << endl; 35 return 0; 36 }
发现对于边界的考虑必须周全!这一点在我用pascal写的时候还不够明显,但当我手测数据全队、交上两次全WA的时候我就明白了……
因为对数组的初始化没有考虑,所以在递推时一定要注意不要跨出数组范围,在内循环的判断中如果没有那个 (j-1>=0)这个程序就是全WA的,除非初始化做得很好(杯具啊,还没看初始化的方面)