Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<set>
- #include<map>
- #include<queue>
- #include<stack>
- #include<deque>
- #include<vector>
- #include<string>
- #include<math.h>
- using namespace std;
- #define INF 1000000001
- #define lint long long
- #define pb push_back
- #define mp make_pair
- #define MOD 1000000007
- struct cow
- {
- int h,w,s;
- };
- cow c[25];
- int m,n;
- int check(int mask,int safe)
- {
- int i,j,s=0;
- lint W=0,H=0;
- for(i=0;i<n;++i)
- {
- if(mask&(1<<i))
- {
- H+=c[i].h;
- W+=c[i].w;
- ++s;
- }
- }
- if(H<m)return 0;
- for(i=0;i<s;++i)
- {
- int ind=-1;
- int mnw=INF;
- for(j=0;j<n;++j)
- {
- if(mask&(1<<j))
- {
- lint curW=W-c[j].w;
- if(c[j].s-curW>=safe)
- {
- if(c[j].w<mnw)
- {
- mnw=c[j].w;
- ind=j;
- }
- }
- }
- }
- if(ind==-1)return 0;
- mask-=(1<<ind);
- W-=c[ind].w;
- }
- return 1;
- }
- int main()
- {
- freopen("guard.in","r",stdin);
- freopen("guard.out","w",stdout);
- int i,j;
- scanf("%d %d",&n,&m);
- for(i=0;i<n;++i)
- {
- scanf("%d %d %d",&c[i].h,&c[i].w,&c[i].s);
- }
- int ans=-1;
- for(i=1;i<(1<<n);++i)
- {
- int l=-1,r=INF;
- while(r-l>1)
- {
- int mid=(r+l)/2;
- if(check(i,mid))
- l=mid;
- else r=mid;
- }
- ans=max(ans,l);
- }
- if(ans==-1)
- printf("Mark is too tall\n");
- else printf("%d\n",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement