Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast")
- #include <fstream>
- using namespace std;
- int n, H, ok, v[105], sum[105], c[105], h[105], st[105], ap[105];
- bool valid(int k)
- {
- if(ap[st[k]]>1)
- return 0;
- if(k>1 && c[st[k]]==c[st[k-1]])
- return 0;
- if(k>1 && h[st[k-1]]<h[st[k]])
- return 0;
- sum[k]=sum[k-1]+h[st[k]];
- if(sum[k]>H)
- return 0;
- if(k>n)
- return 0;
- return 1;
- }
- void bkt(int k)
- {
- for(int x=1; x<=n; x++)
- {
- if(ap[x]==0)
- {
- st[k]=x;
- ap[st[k]]++;
- if(valid(k))
- {
- if(sum[k]==H)
- {
- for(int i=1; i<=k; i++)
- printf("%d ", st[i]);
- printf("\n");
- }
- else
- {
- if(k<n)
- bkt(k+1);
- }
- }
- ap[st[k]]--;
- }
- }
- }
- int main()
- {
- freopen("pc.in", "r", stdin);
- freopen("pc.out", "w", stdout);
- scanf("%d%d", &n, &H);
- for(int i=1; i<=n; i++)
- scanf("%d%d", &h[i], &c[i]);
- bkt(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement