FOJ 1004 Number Triangle

1598 단어 ACM
업데이트:2014-02-08   새벽.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       원본:http://acm.fzu.edu.cn/problem.php?pid=1004
       개술:수치 피 라 미 드 를 주 고 위 에서 아래로,어떻게 가 는 지,지나 가 는 수량 과 최대 치 를 물 어 봅 니 다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
분석 하 다.
       '와 전 된 것'으로 추정 된다.인터넷 에 퍼 진 대부분의 해법 은 피라미드 가 아래 에서 위로 올 라 가 고 2 차원 배열 로 저장 된다.나 는 원래 단일 차원 배열 로 저장 해서 메모 리 를 비교적 절약 했다.나중에 이 문 제 는 사실 매우 간결 한 해법 이 있다 는 것 을 발견 하 였 다.
       동적 계획 은 데 이 터 를 가 져 오 면서 연산 할 수 있 습 니 다.모든 줄 에서 첫 줄 에서 이 점 까지 의 최 적 화 된 값 으로 업 데 이 트 됩 니 다.마지막 줄 의 최대 치 를 판단 하면 됩 니 다.
       이 문제 의 간단 한 변형 은 구 화의 최소 값 으로 바 꾸 는 것 이다.18 줄 의 함 수 를 로 바 꾸 기만 하면 된다.min 이면 됩 니 다.VC+로 제출 하 십시오.VC 가에 있어 야 가 있 습 니 다.max,__min 매크로 정의.
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

int main()
{
    int n, i, j, now;
    while (scanf("%d", &n) != EOF)
    {
        int a[2][1001] = {0};
        for (now = i = 1; i <= n; i++)
        {
            now ^= 1;
            for (j = 1; j <= i; j++)
            {
                scanf("%d", &a[now][j]);
                a[now][j] += __max(a[now^1][j-1], a[now^1][j]);
            }
        }
        printf("%d
", *max_element(&a[now][1], &a[now][n+1])); } return 0; }

좋은 웹페이지 즐겨찾기