发现本题一个漏洞
查看原帖
发现本题一个漏洞
360346
LongLiveMarx楼主2022/7/25 12:20

好像可以先从某颗花生跳回路边再从路边跳到下一颗花生那里,就可以减少某些路径的长度不是吗?但是下面的代码a不了啊

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int m,n,k,b,tot,sum,l;
struct Peanut{
	int x,y,num;
}a[410];
bool cmp(Peanut c,Peanut b){
	return c.num>b.num;
}
int main(){
	scanf("%d%d%d",&m,&n,&k);
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++){
			scanf("%d",&b);
			if(b){
				a[++tot].x=i;
				a[tot].y=j;
				a[tot].num=b;
			}
		}
	sort(a+1,a+tot+1,cmp); 
	k-=a[1].x+1;
	sum+=a[1].num;
	if(k<a[1].x){
		cout<<0<<endl;
		return 0;
	}
	for(int i=2;i<=tot;i++){
		l=abs(a[i].x-a[i-1].x)+abs(a[i].y-a[i-1].y);
		l=min(l,a[i].x+a[i-1].x);
		k-=l;
		if(k<a[i].x+1){
			cout<<sum<<endl;
			return 0;
		}
		else{
			sum+=a[i].num;
			k--;
		}
	}
	cout<<sum;
	return 0;
}
2022/7/25 12:20
加载中...