社区讨论

二维能得80!!!

P1004[NOIP 2000 提高组] 方格取数参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6ho8qa
此快照首次捕获于
2025/11/20 05:02
4 个月前
此快照最后确认于
2025/11/20 05:02
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int a[10][10]={0},f[10][10]={0},ans,memo1[10][10],memo2[10][10],n,x,y,z;
    cin>>n;
    cin>>x>>y>>z;
    a[x][y]=z;
    while((x!=0)||(y!=0)||(z!=0))
    {
        cin>>x>>y>>z;
        a[x][y]=z;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            if(f[i][j-1]>f[i-1][j])
            {
                f[i][j]=a[i][j]+f[i][j-1];
                memo1[i][j]=i;
                memo2[i][j]=j-1;
            }
            else
            {
                f[i][j]=a[i][j]+f[i-1][j];
                memo1[i][j]=i-1;
                memo2[i][j]=j;
            }    
        }
    ans=f[n][n];
    x=n;y=n;
    while((x!=0)&&(y!=0))
    {
        a[x][y]=0;
        z=x;
        x=memo1[x][y];
        y=memo2[z][y];
    }
    memset(f,0,sizeof(f));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            f[i][j]=a[i][j]+max(f[i-1][j],f[i][j-1]);
    cout<<f[n][n]+ans;
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...