• yzoj 1201数字三角形3题解


    题意

    如下图所示为一个数字三角形:

    7

    3 8

    8 1 0

    2 7 4 4

    4 5 2 6 5

    请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大。约定:

    (1)每一步可沿直线向下或右斜线向下走;

    (2)1<=三角形行数<=100;

    (3)三角形中的数字为整数不超过整型,保证结果也不超过整型。

    (4)要求必须经过第n/2行、第n/2列这个位置。

    一道简单的dp题,我们可以发现在n/2行以后n/2列左边的数是不会被用到的,也就是说我们可以分步dp,将n/2行特判即可

    #include<bits/stdc++.h>
    using namespace std;
    int n,x,y,a[110][110],ans=-1;
    int main(){
       scanf("%d",&n);
       x=n/2,y=n/2;
       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){
       	if(i<=x){
       		for(int j=1;j<=i;++j){
       			a[i][j]=max(a[i-1][j]+a[i][j],a[i-1][j-1]+a[i][j]);
       		}
       	}
       	else{
       		if(i==x+1){
       			a[i][y]=a[x][y]+a[i][y];
       			a[i][y+1]=a[x][y]+a[i][y+1];
       		}
       		else{
       			for(int j=y;j<=i;++j){
       				a[i][j]=max(a[i-1][j]+a[i][j],a[i-1][j-1]+a[i][j]);
       			}
       		}
       	} 
       }
       for(int i=y;i<=n;++i) ans=max(ans,a[n][i]);
       printf("%d",ans);
       return 0;
    }
    
  • 相关阅读:
    RATE-MAX——alpha冲刺总结随笔
    RATE-MAX alpha冲刺第十天
    RATE-MAX alpha冲刺第九天
    团队作业第六次——Daily6+1站立式会议+β冲刺汇总
    问题总结(事后诸葛亮和组员交换事宜)
    凡事预则立
    测试随笔
    冲刺随笔
    alpha冲刺——第十天
    alpha冲刺——第九天
  • 原文地址:https://www.cnblogs.com/donkey2603089141/p/11414860.html
Copyright © 2020-2023  润新知