SCU 1114(DP初步_A题)解题报告

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCU 1114(DP初步_A题)解题报告相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.scu.edu.cn/soj/problem.action?id=1114

---------------------------------------------------------------------------------

题意:一个三角形,只能向下或向右下走,要求得到最大值的路线。

思路:从底向上,状态转移方程为f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]。

代码:

技术分享图片
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int MAXN = 100+10;
int a[MAXN][MAXN]={0};
int f[MAXN][MAXN]={0};

int main(void){
    int N= 0;
    scanf("%d",&N);
    for(int i=1;i<=N;i++){
        for(int j=1;j<=i;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=N;i++){
        f[N][i] = a[N][i];
    }
    for(int i=N-1;i>=0;i--){
        for(int j=0;j<=i;j++){
            f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];
        }
    }
    printf("%d\n",f[1][1]);
    
    int j =1;
    for(int i=1;i<=N;i++){
        if(f[i][j]-f[i+1][j]==a[i][j]){
            printf("%d",a[i][j]);
        }else{
            printf("%d",a[i][j]);
            j++;
        }
        if(i==N) printf("\n");
        else printf(" ");
    }
    
    return 0;

}
View Code

 


以上是关于SCU 1114(DP初步_A题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1321(DP初步_I题)解题报告

POJ 1458(DP初步_B题)解题报告

CodeForces 5C(DP初步_G题)解题报告

Codeforces Round #396 (Div. 2) C题Mahmoud and a Message(dp)解题报告

HDU 2199 (二分&三分 _A题)解题报告

HDU 2044(递推&递归_A题)解题报告