Discuz! Board

 找回密码
 立即注册
查看: 40|回复: 0

最佳路径

[复制链接]

3

主题

11

帖子

1306

积分

金牌会员

Rank: 6Rank: 6

积分
1306
发表于 2024-11-23 11:44:28 | 显示全部楼层 |阅读模式
#include<bits/stdc++.h>
using namespace std;
int cnt,maxn=0,n,a[101][101]={0};
struct dfs_1
{
        int x;
        int y;
}p[100],p2[100];

int dfs(int c,int x,int y)
{
        for(int i=0;i<2;i++)
        {
               
                p[c].x=x+1;
                p[c].y=y+i;
                cnt+=a[p[c].x][p[c].y];
                if(c==n)
                {
                        if(cnt>maxn)
                        {
                                maxn=cnt;
                                memcpy(p2,p,sizeof(p));
                        }
               
                }
                else
                {
                        dfs(c+1,p[c].x,p[c].y);
                }
                cnt=cnt-a[p[c].x][p[c].y];       
        }
}
int main()
{
        cin>>n;
        for(int i=1;i<=n;i++)
        {
                for(int j=1;j<=i;j++)
                {
                        cin>>a[i][j];
                }
        }
        cnt=a[1][1];
        p[1].x=1;
        p[1].y=1;
        dfs(2,1,1);
        cout<<maxn<<endl;
        for(int i=1;i<=n;i++)
        {
                        cout<<p[i].x<<" "<<p[i].y;
                        cout<<endl;
        }
//        for(int i=1;i<=n;i++)
//        {
//                dp[n][i]=a[n][i];
//        }
//        for(int i=n-1;i>=1;i--)
//        {
//                for(int j=1;j<=i;j++)
//                {
//                        dp[i][j]=max(dp[i+1][j+1],dp[i+1][j])+a[i][j];
//                        cout<<dp[i][j]<<" ";
//                }
//                cout<<endl;
//        }
//        cout<<dp[1][1];
//        dp[1][1]=a[1][1];
//        for(int i=2;i<=n;i++)
//        {
//                for(int j=1;j<=i;j++)
//                {
//                        dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];
//                        //cout<<dp[i][j]<<" ";
//                }
//                //cout<<endl;
//        }
//        for(int i=1;i<=n;i++)
//        {
//                if(dp[n][i]>=maxn)
//                {
//                        maxn=dp[n][i];
//                }
//        }
//        cout<<maxn;
        return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 02:23 , Processed in 0.048120 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表