frp

E

frp
May 16th, 2011
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. typedef unsigned char uchar;
  5. typedef unsigned uint;
  6. int a[30000];
  7. int mlc[25001];
  8.  
  9. bool res[30000];
  10. int main()
  11. {
  12.     uint n;scanf("%u",&n);
  13.     uint sum=0;
  14.     for(int i=0;i<n;i++)
  15.     {
  16.         scanf("%u",&a[i]);
  17.         sum+=a[i];
  18.     }
  19.     uint osum=sum;
  20.     sum>>=1;
  21. /*  for(int i=0;i<=sum;i++)
  22.     {
  23.         if(i!=a[0])mlc[i]=-1;
  24.         else
  25.         {
  26.             mlc[i]=0;
  27.         }
  28.         }*/
  29.     mlc[0]=0;
  30.     for(int i=1;i<=sum;i++)mlc[i]=-1;
  31.     uint currsum=0;
  32.     for(int i=0;i<n;i++)
  33.     {
  34.         currsum=min(currsum+a[i],sum);
  35.         for(int j=currsum;j>=0;j--)
  36.             if(mlc[j]!=-1 && j+a[i]<=currsum && mlc[j+a[i]]==-1)mlc[j+a[i]]=i;
  37.     }
  38.     int mj=0;
  39.     for(mj=sum;mj>=0;mj--)if(mlc[mj]!=-1)break;
  40.     printf("%u %u\n",mj,osum-mj);
  41.     int p=mj;
  42.     while(p>0)
  43.     {
  44.         if(mlc[p]==-1)break;
  45.         res[mlc[p]]=true;
  46.         p=p-a[mlc[p]];
  47.     }
  48.     bool fst=true;
  49.     for(int i=0;i<n;i++)
  50.         if(res[i])
  51.         {
  52.             if(fst)fst=false;
  53.             else printf(" ");
  54.             printf("%d",i+1);
  55.         }
  56.     printf("\n");
  57.     fst=true;
  58.     for(int i=0;i<n;i++)
  59.         if(!res[i])
  60.         {
  61.             if(fst)fst=false;
  62.             else printf(" ");
  63.             printf("%d",i+1);
  64.         }
  65.         printf("\n");
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment