涉及到结构体,定义一个position结构,用数组,关键是构思好。这题有成就感,high!
Code
#include<iostream>
using namespace std;
int p;
struct position{
int x;
int y;
int peanuts;
};
int main()
{
int test,m,n,k,l,i,j,time[3000],lasttime,pea[3000];
position pst[3000],temp;
cin>>test;
while(test--)
{
l=0;
cin>>m>>n>>k;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{ cin>>p;
if(p>0)
{pst[l].x=i;pst[l].y=j;pst[l].peanuts=p;l++;}
}
for(i=0;i<l-1;i++)
for(j=l-1;j>i;j--)
if(pst[j].peanuts>pst[j-1].peanuts)
{temp=pst[j];pst[j]=pst[j-1];pst[j-1]=temp;}//从大到小排序
time[0]=pst[0].x*2+1;lasttime=pst[0].x+1;pea[0]=pst[0].peanuts;
for(i=1;i<l;i++)
{
lasttime+=abs(pst[i].x-pst[i-1].x)+abs(pst[i].y-pst[i-1].y)+1;
time[i]=lasttime+pst[i].x;
pea[i]=pea[i-1]+pst[i].peanuts;
}
for(i=0;i<l;i++)
if(time[i]>k)
{if(i==0) cout<<'0'<<endl;
else
cout<<pea[i-1]<<endl;
break;}
if(i==l)cout<<pea[i-1]<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int p;
struct position{
int x;
int y;
int peanuts;
};
int main()
{
int test,m,n,k,l,i,j,time[3000],lasttime,pea[3000];
position pst[3000],temp;
cin>>test;
while(test--)
{
l=0;
cin>>m>>n>>k;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{ cin>>p;
if(p>0)
{pst[l].x=i;pst[l].y=j;pst[l].peanuts=p;l++;}
}
for(i=0;i<l-1;i++)
for(j=l-1;j>i;j--)
if(pst[j].peanuts>pst[j-1].peanuts)
{temp=pst[j];pst[j]=pst[j-1];pst[j-1]=temp;}//从大到小排序
time[0]=pst[0].x*2+1;lasttime=pst[0].x+1;pea[0]=pst[0].peanuts;
for(i=1;i<l;i++)
{
lasttime+=abs(pst[i].x-pst[i-1].x)+abs(pst[i].y-pst[i-1].y)+1;
time[i]=lasttime+pst[i].x;
pea[i]=pea[i-1]+pst[i].peanuts;
}
for(i=0;i<l;i++)
if(time[i]>k)
{if(i==0) cout<<'0'<<endl;
else
cout<<pea[i-1]<<endl;
break;}
if(i==l)cout<<pea[i-1]<<endl;
}
return 0;
}