80分 dalao求调
查看原帖
80分 dalao求调
701478
_FastFT2013楼主2023/10/27 13:42

自己想了个方法,没有对,80分 dalao求调

#include<iostream>
#include<vector>
using namespace std;
int n,cnt,ans;
int maps[10][10],dp[10][10];
int dx[]={1,0};
int dy[]={0,1};
vector< pair<int,int> >lu,newlu;
int int_read(){
	int x=0;
	short f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-'){
			f=-f;
		}
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
void qwq(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<maps[i][j]<<" ";
		}
		cout<<"\n";
	}
}
void dfs(int x,int y){
	ans+=maps[x][y];
	newlu.push_back({x,y});
	if(x==n&&y==n){
		if(ans>cnt){
			cnt=ans;
			lu=newlu;
		}
		ans-=maps[x][y];
		newlu.pop_back();
		return;
	}
	for(int i=0;i<=1;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx>=1&&nx<=n&&ny>=1&&ny<=n){
			dfs(nx,ny);
		}
	}
	ans-=maps[x][y];
	newlu.pop_back();
} 
int main(){
	n=int_read();
	int x,y,z;
	while(true){
		x=int_read();
		y=int_read();
		z=int_read();
		if(!x){
			break;
		}
		maps[x][y]=z;
	}
	qwq();
	dfs(1,1);
	cout<<cnt<<"\n";
	for(int i=0;i<int(lu.size());i++){
		maps[lu[i].first][lu[i].second]=0;
	}
	qwq();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			dp[i][j]=max(dp[i-1][j],dp[i][j-1])+maps[i][j];
		}
	}
	cout<<dp[n][n]+cnt; 
	return 0;
} 
2023/10/27 13:42
加载中...