本来今晚不想写代码的,结果改写了下Bell_Ford的一道题后看了下提交记录,发现了这道题自己居然一直没过。这道题是上一年寒假回来选拔珠海赛时候的练习题了,不知道怎么形容,看到这道题心里很不是滋味,无法想像一年前的自己怎么发挥的这么窝囊,从选拔一直到中大赛,一路水得一塌糊涂。一气之下再扫了遍题目,打开编译器十五分钟写完1A秒过,这以前以后,惆怅啊。但愿今年顺顺利利,比赛要好,学习也要好。最重要的是,我在乎的人也要好。。。 等我回中大争气给你看!
题意略去,就是嘟嘟捡花生,排序花生坐标,贪心尝试即可。注意捡下一个花生要保证时间足够出去。
1
#include<cstdio>
2
#include<cstdlib>
3
#include<cstring>
4
#define N 55
5![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
struct nod
{int u,v,val;};
6
struct nod p[N*N];
7![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
8![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int cmp(const void *p,const void *q)
{
9
return ((struct nod *) q)->val-((struct nod *) p)->val;
10
}
11![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
12![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
int main()
{
13
int n,m,time;
14
int t,i,j,k,total;
15
int posu,posv,res;
16
scanf("%d",&t);
17![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while(t--)
{
18
scanf("%d%d%d",&n,&m,&time);
19
total=0;
20
for(i=0;i<n;i++)
21![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(j=0;j<m;j++)
{
22
scanf("%d",&k);
23![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(k)
{
24
p[total].u=i;
25
p[total].v=j;
26
p[total].val=k;
27
total++;
28
}
29
}
30
qsort(p,total,sizeof(p[0]),cmp);
31![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
32
time-=2;
33
res=0;
34
posu=0; posv=p[0].v;
35![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(i=0;i<total;i++)
{
36
if( time-abs(p[i].u-posu)-abs(p[i].v-posv)
37![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
- p[i].u -1 >=0 )
{
38
time-=abs(p[i].u-posu)+abs(p[i].v-posv)+1;
39
res+=p[i].val;
40
posu=p[i].u;
41
posv=p[i].v;
42
}
43
else break;
44
}
45
printf("%d\n",res);
46
}
47
return 0;
48
}