本来今晚不想写代码的,结果改写了下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}