BUCT-OJ 2060 数字三角形4

【题目来源】: TYVJ 1084

【题目链接】:点击打开链接

【解题思路】:

此题我的思路和数字三角形3的思路一样,只不过(n/2,n/2)换成了待输入的点(x,y),必然经过一点,那我就从这点为分界,先从顶递推至此点所在行,再从底递推至此点所在行,两次的结果累加在此点上,即为所得结果

A C代码】:

#include <iostream> 
#include <algorithm> 
#include <cstring> 
#include <cstdio> 
using namespace std; 
  
#define maxn 30 
  
int arr[maxn][maxn]; 
int main() 
{  
    int n, i, j, x, y; 
    while(~scanf("%d", &n)) 
    { 
        memset(arr, 0, sizeof(arr)); 
        for(i = 1; i <= n; i++) 
        { 
            for(j = 1; j <= i; j++) 
               scanf("%d", &arr[i][j]); 
        } 
        scanf("%d%d", &x, &y); 
        for(i = n; i > x; i--) 
        { 
            for(j=1; j <= i; j++) 
            { 
                arr[i-1][j] += max(arr[i][j], arr[i][j+1]); 
            } 
        } 
        for(i = 1; i < x; i++) 
        { 
            for(j=1; j <= i+1; j++) 
            { 
                arr[i+1][j] += max(arr[i][j-1], arr[i][j]); 
            } 
        } 
        printf("%d\n", arr[x][y]); 
    } 
    return 0; 
} 


posted on 2013-05-19 14:17  Gddxz  阅读(146)  评论(0编辑  收藏  举报

导航