求调
  • 板块灌水区
  • 楼主liuergou
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/25 22:18
  • 上次更新2024/6/26 13:15:49
查看原帖
求调
722656
liuergou楼主2024/6/25 22:18

P1004

#include <bits/stdc++.h>
using namespace std;
int n;
int a[10][10];
int ans=0;
bool vis[10][10];
int don,rit;
void solve(int x,int y,int sum){
    if(x>=don&&y>=rit){
        ans=max(ans,sum);
        return;
    }
    if(x<don)solve(x+1,y,sum+a[x+1][y]*(1-vis[x+1][y]));
    if(y<rit)solve(x,y+1,sum+a[x][y+1]*(1-vis[x][y+1]));
    
}
void dfs(int x,int y,int sum){
    if(x>=don&&y>=rit){
        solve(1,1,sum);
        return;
    }
    if(x<don){
        vis[x+1][y]=1;
        dfs(x+1,y,sum+a[x+1][y]);
        vis[x+1][y]=0;
    }
    if(y<rit){
        vis[x][y+1]=1;
        dfs(x,y+1,sum+a[x][y+1]);
        vis[x][y+1]=0;
    }
}
int main(){
    cin >> n;
    int x,y,d;
    cin >> x >> y >> d;
    while(x!=0){
        a[x][y]=d;
        cin >> x >> y >> d;
    }
    for(int i=1;i<=n;i++){
        for(int j=n;j>=1;j--){
            if(a[i][j]>0){
                don=max(don,j);
                break;
            }
        }
    } 
    for(int i=1;i<=n;i++){
        for(int j=n;j>=1;j--){
            if(a[j][i]>0){
                rit=max(i,rit);
                break;
            }
        }
    } 
    vis[1][1]=1;
    dfs(1,1,a[1][1]);
    cout << ans;
    return 0;
}

虽然说这个复杂度过不了但是数据比较弱,我这个可以骗过去

但是这个样例过不了(不懂为什么) 输入:

7
1 3 2
1 4 3
2 3 3
3 3 3
5 5 4
6 5 4
7 3 2
7 5 4
0 0 0

图:

0 0 2 3 0 0 0 
0 0 3 0 0 0 0 
0 0 3 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 4 0 0 
0 0 0 0 4 0 0 
0 0 2 0 4 0 0 

输出:

25

我的输出:

15
2024/6/25 22:18
加载中...