真的是好久没写总结了,每天都在忙着刷题,看题,看新的东西,暑假时间多了,更要提高效率。说一下今天的比赛,其实也没啥好说的,或许对于我们来说题目难度有点大,每次我们都是跟题,这样的选择也是无奈啊。。。每次做多校都是被虐。。。在受虐中成长吧,今天的比赛第一个题,不知是数据水,还是就是贪心。。。在怀疑中31分钟1Y了。。。剩下继续找可做的题。。找了半天,发现各种神似图论的题。。第二个神似几何题,然后我觉得好像见过,然后想到做过1维答案是中位数,然后就以为是和中位数,然后悲剧了14次提交,中间各种恶搞啊。。在1-3个小时的时候,现在想想就是一种折磨啊,看着外校的队伍都在过题,实在是痛苦啊,帮着scf搞那个最短路,然后想了想自己那个可以DP搞,然后自己换了种方式,写的时间3点到4点吧,终于调试出来一次过了。这个题,按贪心做的,也没找到反例,所以才有后来的悲剧。以后一定要冷静分析,说不定就YY出来了,坚持,不能放弃。。没做出来的几个题,有机会补上吧。
HDU 4310 Hero (官方题解是状态压缩DP....)
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct node 5 { 6 int dp; 7 int hp; 8 double v; 9 }p[2001]; 10 int cmp(const void *a,const void *b) 11 { 12 return (*(struct node*)a).v < (*(struct node*)b).v?1:-1; 13 } 14 int main() 15 { 16 int i,n,sum,k; 17 while(scanf("%d",&n)!=EOF) 18 { 19 sum = 0;k = 0; 20 memset(p,0,sizeof(p)); 21 for(i = 0;i <= n-1;i ++) 22 { 23 scanf("%d%d",&p[i].dp,&p[i].hp); 24 p[i].v = p[i].dp*1.0/p[i].hp; 25 sum += p[i].dp; 26 } 27 qsort(p,n,sizeof(p[0]),cmp); 28 for(i = 0;i <= n-1;i ++) 29 { 30 k += sum*p[i].hp; 31 sum -= p[i].dp; 32 } 33 printf("%d\n",k); 34 } 35 return 0; 36 }
HDU 4311 Meeting point-1(DP)官方题解和我做法差不多,听说有用树状数组做的,犀利。。。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 1000000000 5 struct node 6 { 7 __int64 x; 8 __int64 y; 9 int z; 10 } p[100001]; 11 int cmp1(const void *a,const void *b) 12 { 13 return (*(struct node*)a).x > (*(struct node*)b).x?1:-1; 14 } 15 int cmp2(const void *a,const void *b) 16 { 17 return (*(struct node*)a).y > (*(struct node*)b).y?1:-1; 18 } 19 __int64 n,ox[100001],oy[100001],sum[100001]; 20 int main() 21 { 22 __int64 i,k; 23 __int64 min; 24 int t; 25 scanf("%d",&t); 26 while(t--) 27 { 28 scanf("%I64d",&n); 29 k = 0; 30 memset(p,0,sizeof(p)); 31 memset(ox,0,sizeof(ox)); 32 memset(oy,0,sizeof(oy)); 33 memset(sum,0,sizeof(sum)); 34 for(i = 0; i <= n-1; i ++) 35 { 36 scanf("%I64d%I64d",&p[i].x,&p[i].y); 37 p[i].z = i; 38 } 39 qsort(p,n,sizeof(p[0]),cmp1); 40 ox[0] = p[0].x; 41 for(i = 1;i <=n-1;i ++) 42 { 43 ox[i] += p[i].x+ox[i-1]; 44 } 45 /* for(i = 0;i <= n-1;i ++) 46 { 47 printf("%I64d %I64d\n",p[i].x,p[i].y); 48 }*/ 49 sum[p[0].z] = (ox[n-1] - p[0].x*n); 50 for(i = 1;i <= n-1;i ++) 51 { 52 sum[p[i].z] = ox[n-1]-ox[i-1]-(n-i)*p[i].x+i*p[i].x-ox[i-1];//这里写的最纠结啊。 53 } 54 /*for(i = 0;i <= n-1;i ++) 55 { 56 printf("%I64d ",ox[i]); 57 } 58 printf("\n"); 59 */ 60 qsort(p,n,sizeof(p[0]),cmp2); 61 oy[0] = p[0].y; 62 for(i = 1;i <=n-1;i ++) 63 { 64 oy[i] += p[i].y+oy[i-1]; 65 } 66 sum[p[0].z] += (oy[n-1] - p[0].y*n); 67 for(i = 1;i <= n-1;i ++) 68 { 69 sum[p[i].z] += oy[n-1]-oy[i-1]-(n-i)*p[i].y+i*p[i].y-oy[i-1]; 70 } 71 min = sum[0]; 72 for(i = 1;i <= n-1;i ++) 73 { 74 if(min > sum[i]) 75 min = sum[i]; 76 } 77 printf("%I64d\n",min); 78 } 79 return 0; 80 }