Advertisement
Guest User

Untitled

a guest
Dec 16th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<algorithm>
  4. #include<set>
  5. #include<map>
  6. #include<queue>
  7. #include<stack>
  8. #include<deque>
  9. #include<vector>
  10. #include<string>
  11. #include<math.h>
  12. using namespace std;
  13.  
  14. #define INF 1000000001
  15. #define lint long long
  16. #define pb push_back
  17. #define mp make_pair
  18. #define MOD 1000000007
  19.  
  20. struct cow
  21. {
  22.     int h,w,s;
  23. };
  24. cow c[25];
  25. int m,n;
  26.  
  27. int check(int mask,int safe)
  28. {
  29.     int i,j,s=0;
  30.     lint W=0,H=0;
  31.     for(i=0;i<n;++i)
  32.     {
  33.         if(mask&(1<<i))
  34.         {
  35.             H+=c[i].h;
  36.             W+=c[i].w;
  37.             ++s;
  38.         }
  39.     }
  40.  
  41.     if(H<m)return 0;
  42.  
  43.     for(i=0;i<s;++i)
  44.     {
  45.         int ind=-1;
  46.         int mnw=INF;
  47.         for(j=0;j<n;++j)
  48.         {
  49.             if(mask&(1<<j))
  50.             {
  51.                 lint curW=W-c[j].w;
  52.                 if(c[j].s-curW>=safe)
  53.                 {
  54.                     if(c[j].w<mnw)
  55.                     {
  56.                         mnw=c[j].w;
  57.                         ind=j;
  58.                     }
  59.                 }
  60.             }
  61.         }
  62.         if(ind==-1)return 0;
  63.         mask-=(1<<ind);
  64.         W-=c[ind].w;
  65.     }
  66.     return 1;
  67. }
  68.  
  69. int main()
  70. {
  71.     freopen("guard.in","r",stdin);
  72.     freopen("guard.out","w",stdout);
  73.     int i,j;
  74.     scanf("%d %d",&n,&m);
  75.     for(i=0;i<n;++i)
  76.     {
  77.         scanf("%d %d %d",&c[i].h,&c[i].w,&c[i].s);
  78.     }
  79.  
  80.     int ans=-1;
  81.     for(i=1;i<(1<<n);++i)
  82.     {
  83.         int l=-1,r=INF;
  84.         while(r-l>1)
  85.         {
  86.             int mid=(r+l)/2;
  87.             if(check(i,mid))
  88.                 l=mid;
  89.             else r=mid;
  90.         }
  91.         ans=max(ans,l);
  92.     }
  93.     if(ans==-1)
  94.         printf("Mark is too tall\n");
  95.     else printf("%d\n",ans);
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement