80分,求调试
  • 板块学术版
  • 楼主zshcchenyi
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/13 20:13
  • 上次更新2023/12/13 23:11:02
查看原帖
80分,求调试
499463
zshcchenyi楼主2023/12/13 20:13

题目传送门

#include<bits/stdc++.h>
using namespace std;
const int N=30;//20+10
int n,m,t;
int x,y;
int a[N][N],back[N][N];//back记录点(x,y)回到路上的时间 
void findxy(int xx,int yy){//输入小熊的现坐标 
	int maxx=-1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]>maxx){
				maxx=a[i][j];
				x=i,y=j; 
			}
		}
	} 
	return ;
}
int dfs(){
	int ans=0;
	t=t-(back[x][y]-1);//前去第一个点并采摘 
	ans=ans+a[x][y];
	while(t>=back[x][y]){ 
		int tx=x,ty=y;//(tx,ty)为小熊之前的位置 
		findxy(x,y);//找之后最大为(x,y) 
		t-=(abs(tx-x)+abs(ty-y)+1);//移动过去并采摘 
		if(back[x][y]>t){//如果过去采摘后不足时间返回 
			break;
		}else{//时间足够 
			ans+=a[x][y];//采摘 
			a[x][y]=0;
		}
	}
	return ans;
}
int main(){
	cin>>n>>m>>t;
	int maxn=-1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			back[i][j]=j; 
			if(a[i][j]<maxn){
				maxn=a[i][j];
				x=i;
				y=j;
			}
		} 
	}
	cout<<dfs()<<endl;
	return 0;
}

大佬帮调一下,谢谢

2023/12/13 20:13
加载中...