D: Remote Control
#include <cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<map>using namespacestd;typedef unsignedLong LongLL;#defineMet (A, B) (Memset (A,b,sizeof (a)))Const intINF = 1e9+7;Const intN =11000;Const intMOD =9973;inta[ -], S, e;intSlove () {intI, Mintime = -, shi=e/Ten, ge=e%Ten; if(s>e) {if(a[ One]) Mintime= Min (Mintime, --(S-e)); if(a[ A]) Mintime= Min (Mintime, S-e); } Else if(s<e) {if(a[ One]) Mintime= Min (Mintime, E-s); if(a[ A]) Mintime= Min (Mintime, --(E-s)); } ElseMintime=0; if(S!=e &&!a[ One] &&!a[ A]) { if(shi==0) { if(!a[ge]) Mintime =-1; } Else { if(!a[Ten]) Mintime =-1; if(!a[shi]) Mintime =-1; if(!a[ge]) Mintime =-1; } } for(i=0; i<= About; i++) { if(i==s)Continue; intSH = i/Ten, G = i%Ten; if(sh==0&&A[g]) { if(i>e) {if(a[ One])///getting biggermintime = min (Mintime, --(I-E) +1); if(a[ A])///become smallermintime = Min (Mintime, (I-E) +1); } Else if(i<e) {if(a[ One]) Mintime= Min (Mintime, (e-i) +1); if(a[ A]) Mintime= Min (Mintime, --(E-i) +1); } Elsemintime = min (Mintime,1); } Else if(a[Ten] && A[sh] &&A[g]) { if(i>=e) {if(a[ One]) Mintime= Min (Mintime, --(I-E) +3); if(a[ A]) Mintime= Min (Mintime, (I-E) +3); } Else if(i<e) {if(a[ One]) Mintime= Min (Mintime, (e-i) +3); if(a[ A]) Mintime= Min (Mintime, --(E-i) +3); } Elsemintime = min (Mintime,3); } } if(mintime== -) Mintime= -1; returnMintime;}intMain () {intT; scanf ("%d", &T); while(t--) {Met (A,0); scanf ("%d%d%d%d", &a[1], &a[2], &a[3], &a[ One]); scanf ("%d%d%d%d", &a[4], &a[5], &a[6], &a[ A]); scanf ("%d%d%d", &a[7], &a[8], &a[9]); scanf ("%d%d", &a[Ten], &a[0]); scanf ("%d%d", &s, &e); intAns =Slove (); printf ("%d\n", ans); } return 0;}/***/
View Code
g:divideing Jewels (01 backpack) the code's a little ugly.
#include <cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<map>using namespacestd;typedef unsignedLong LongLL;#defineMet (A, B) (Memset (A,b,sizeof (a)))Const intINF = 1e9+7;Const intN =11000;Const intMOD =9973; inta[ -], Dp[n], v[n], K; voidSlove ()///the point is how to turn it into a 01 backpack.{ intI, J; K=1; for(i=1; i<=Ten; i++) for(j=1; j<=a[i]; J + +) V[k++] =i; K--;} intMain () {intIcase=1; while(SCANF ("%d%d%d%d%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9], &a[Ten])!=EOF) { intsum=0, I, J; for(i=1; i<=Ten; i++) Sum+ = a[i]*i; if(sum==0) Break; Met (DP,0); Met (V,0); Slove (); for(i=1; i<=k; i++) for(j=sum/2; j>=v[i]; j--) { if(j>=V[i]) dp[j]= Max (Dp[j], dp[j-v[i]]+V[i]); } if(sum%2|| dp[sum/2]!=sum/2) printf ("#%d:can ' t be divided.\n\n", icase++); Elseprintf ("#%d:can be divided.\n\n", icase++); } return 0;}
View Code
The fifth annual ACM Program Design Competition in Henan province