40分求助
查看原帖
40分求助
522483
VictoriaEVA楼主2022/10/24 19:45
#include<bits/stdc++.h>
using namespace std;
int n,t[100][100];
int ans1;
pair <int,string> ans;
void dfs(int x,int y,int sum,string way)
{
	if(x>n||y>n) return;
	if(x==n&&y==n)
	{
		if(ans.first>sum) return;
		ans.first=sum;
		ans.second=way;
		return;
	}
	dfs(x+1,y,sum+t[x][y],way+'0');
	dfs(x,y+1,sum+t[x][y],way+'1');
}
void dfs1(int x,int y,int sum)
{
	if(x>n||y>n) return;
	if(x==n&&y==n)
	{
		ans1=max(ans1,sum);
		return;
	}
	dfs1(x+1,y,sum+t[x][y]);
	dfs1(x,y+1,sum+t[x][y]);
}
int main()
{
	scanf("%d",&n);
	int a,b,c;
	do
	{
		scanf("%d%d%d",&a,&b,&c);
		t[a][b]=c;
	}
	while(a||b||c);
	dfs(1,1,0,"");
	t[0][0]=0;
	for(int i=1,j=1,s=0; i<=n&&j<=n;)
	{
		if(ans.second[s++]-'0')
			j++;
		else
			i++;
		t[i][j]=0;
	}
	dfs1(1,1,0);
	printf("%d\n",ans.first+ans1);
	return 0;
}
2022/10/24 19:45
加载中...