社区讨论
16分求调
P1004[NOIP 2000 提高组] 方格取数参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m1t1msq6
- 此快照首次捕获于
- 2024/10/03 16:37 去年
- 此快照最后确认于
- 2025/11/04 18:12 4 个月前
思路大概是用l数组存储当前路径,然后判断路径上的数字和是不是大于最大值,大于就替换;然后将第一条路径上的数字清零,再跑第二遍
CPP#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
};
int n,maxn=-1,ans=0;
int m[9][9];
vector<node> l;
vector<node> last;
void dfs(int x,int y,vector<node> &l,int cnt)
{
node u;
u.x=x,u.y=y;
l.push_back(u);
if(x>n || y>n) return;
if(x==n && y==n){
if(cnt>maxn){
maxn=cnt;
last.clear();
last.resize(l.size());
copy(l.begin(),l.end(),last.begin());
}
}
dfs(x+1,y,l,cnt+m[x][y]);dfs(x,y+1,l,cnt+m[x][y]);
l.pop_back();
return;
}
int main()
{
cin>>n;
while(1)
{
int x,y,a;
cin>>x>>y>>a;
if(x==0 && y==0 && a==0) break;
m[x][y]=a;
}
dfs(1,1,l,0);
ans+=maxn;
maxn=0;
for(int i=0;i<last.size();i++)
{
m[last[i].x][last[i].y]=0;
}
dfs(1,1,l,0);
cout<<ans+maxn;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...