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的,除非初始化做得很好(杯具啊,还没看初始化的方面)

posted @ 2012-07-04 20:05  NoRush  阅读(965)  评论(0编辑  收藏  举报