奇怪的背包问题增加了 题目链接 算法分析 代码实现 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define x first #define y second using namespace std; const int maxn=1e5+5; typedef pair<int ,int > PII; int vis[maxn]; int n; int main() { int t; cin>>t; while(t--) { cin>>n; PII a[maxn]; for(int i=1;i<=n;i++) { int x; cin>>x; a[i].x=(1<<x); a[i].y=i; vis[i]=0; } sort(a+1,a+1+n); reverse(a+1,a+1+n); int sum=(1<<30); for(int i=1;i<=n;i++) { if(sum>=a[i].x) { sum-=a[i].x; vis[a[i].y]=1; } } if(sum) cout<<"impossible"<<endl; else { for(int i=1;i<=n;i++) cout<<vis[i]; cout<<endl; } } return 0; }