本来今晚不想写代码的,结果改写了下Bell_Ford的一道题后看了下提交记录,发现了这道题自己居然一直没过。这道题是上一年寒假回来选拔珠海赛时候的练习题了,不知道怎么形容,看到这道题心里很不是滋味,无法想像一年前的自己怎么发挥的这么窝囊,从选拔一直到中大赛,一路水得一塌糊涂。一气之下再扫了遍题目,打开编译器十五分钟写完1A秒过,这以前以后,惆怅啊。但愿今年顺顺利利,比赛要好,学习也要好。最重要的是,我在乎的人也要好。。。 等我回中大争气给你看!

      题意略去,就是嘟嘟捡花生,排序花生坐标,贪心尝试即可。注意捡下一个花生要保证时间足够出去。

 1#include<cstdio>
 2#include<cstdlib>
 3#include<cstring>
 4#define N 55
 5struct nod{int u,v,val;};
 6struct nod p[N*N];
 7
 8int cmp(const void *p,const void *q){
 9    return ((struct nod *) q)->val-((struct nod *) p)->val;
10}

11
12int main(){
13    int n,m,time;
14    int t,i,j,k,total;
15    int posu,posv,res;
16    scanf("%d",&t);
17    while(t--){
18        scanf("%d%d%d",&n,&m,&time);
19        total=0;
20        for(i=0;i<n;i++)
21            for(j=0;j<m;j++){
22                scanf("%d",&k);
23                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
32        time-=2;
33        res=0;
34        posu=0; posv=p[0].v;
35        for(i=0;i<total;i++){
36            if( time-abs(p[i].u-posu)-abs(p[i].v-posv)
37                - 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}