码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-29 21:34:37      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:状态   void   isp   for   soj   ide   acm   lan   code   

题目链接: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题)解题报告

标签:状态   void   isp   for   soj   ide   acm   lan   code   

原文地址:https://www.cnblogs.com/caomingpei/p/8379221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!