70 我是真的不理解(借鉴了满分题解的思虑)
查看原帖
70 我是真的不理解(借鉴了满分题解的思虑)
1228836
destiny_w楼主2024/3/21 14:21
#include<bits/stdc++.h>
using namespace std;
int a[1000][1000]{};
struct node{
	int time,w,x,y;//时间 个数 坐标
}q[1000000];
int main(){
	int k=1;
	int m,n,t; 
	cin>>m>>n>>t;
	for(int i=1;i<k;++i){
		for(int j=1;j<=k;++j){
			cin>>a[i][j];
			if(a[i][j]>0){
				q[k].x=i;
				q[k].y=j;
				q[k].w=a[i][j];
				k++;
			}
		}
	}
	//从大到小排序 在规定时间内 先摘大的 再摘小的 (题目要求;在规定时间摘最多) 
	for(int i=1;i<k;++i){
		for(int j=i+1;j<=k;++j){
			if(q[i].w<q[j].w){
				swap(q[i],q[j]);
			}
		}
	}
	//计算最多能摘多少 
	int u=0,ans=0;
	for(int i=1;i<=k;++i){
		for(int j=1;j<=k;++j){
			u=q[i].x+1;//返回
			if(i==1){
				q[i].time=q[i].x+1;
			}//第一个步数(时间):路边跳到x坐标+采摘花生的时间(1) 
			else{
				q[i].time=q[i-1].time+abs(q[i-1].x-q[i].x)+abs(q[i].y-q[i-1].y)+1;
			}//步数:上一个的x坐标(要返回路边)+从路边到第i个对应的x坐标+从对应的x坐标走到第i个的y坐标+采摘花生的时间(=+1) 
		}
		//cout<<q[i].time<<" "<<q[i].w<<" "<<u<< endl;
		if(q[i].time+u<=t){//完整的步数 
			ans+=q[i].w;
			//cout<<ans<<endl;
			
		}// 时间合法 加上 
	}
	cout<<ans<<endl;
}
2024/3/21 14:21
加载中...