题解
2024-09-28 22:24:43
发布于:上海
4阅读
0回复
0点赞
贪心。把它当做二维数组题目来做无疑很难,但是如果当做点来做的话,用结构体存储x和y坐标以及花生个数,并按照个数排序,最后模拟即可。
代码
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int x,y,n;
}g[405];
int n,m,k,v,c,s,t;
bool cmp(node a,node b){
return a.n>b.n;
}
int main(){
while(cin>>n>>m>>k){
for(int i=0;i<n;i++)for(int j=0;j<m;j++){
cin>>v;
if(v)g[c++]={i+1,j+1,v};
}
sort(g,g+c,cmp);
t+=g[0].x****+=g[0].n;
if(t+g[0].x>k)cout<<0<<endl;
else if(c==1)cout<<s<<endl;
else{
for(int i=1;i<c;i++){
if(t+abs(g[i].x-g[i-1].x)+abs(g[i].y-g[i-1].y)+g[i].x+1<=k){
//采当前花生并回到路边时间还足够
t+=abs(g[i].x-g[i-1].x)+abs(g[i].y-g[i-1].y)+1;
s+=g[i].n;
}else{
cout<<s<<endl;
return 0;
}
}
cout<<s<<endl;
}
}
return 0;
}
这里空空如也
有帮助,赞一个