#include <bits/stdc++.h>
#define x first
#define y second
#define pb push_back
#define mp make_pair
#define up_b upper_bound
#define low_b lower_bound
#define sz(x) (int)x.size()
#define all(v) v.begin(),v.end()
#define nl '\n'
#define boost ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
typedef pair<ll,ll> pll;
const ll INF=1e18;
const int inf=1e9;
const ld eps=1e-7;
const ld pi=acos(-1);
const int dx[8]={0,0 ,1,-1,1,1,-1,-1};
const int dy[8]={1,-1,0,0,1,-1,1,-1};
const int mod1=998244353;
const int mod2=1e9+7;
const int N=1e4+1;
pii a[N];
vector<int> find_subset(int l,int u,vector<int>w){
int n=0;
for(int i=0;i<sz(w);i++){
if(w[i]>u)continue;
n++;
a[n].x=w[i];
a[n].y=i;
}
vector<int>ans;
if(u>1000){
const int M=u+1;
bitset<M>dp[n+1];
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i]=(dp[i-1]<<a[i].x);
dp[i]|=(dp[i-1]);
}
int val=-1;
for(int i=l;i<=u;i++){
if(dp[n][i]){
val=i;
break;
}
}
if(val>0){
while(val>0){
if(val>=a[n].x&&dp[n-1][val-a[n].x]){
ans.pb(a[n].y);
val-=a[n].x;
n--;
}
else if(dp[n-1][val]){
n--;
}
}
}
}
else{
bitset<10001>dp[n+1];
dp[0][0]=1;
for(int i=1;i<=n;i++){
dp[i]=(dp[i-1]<<a[i].x);
dp[i]|=(dp[i-1]);
}
int val=-1;
for(int i=l;i<=u;i++){
if(dp[n][i]){
val=i;
break;
}
}
if(val>0){
while(val>0){
if(val>=a[n].x&&dp[n-1][val-a[n].x]){
ans.pb(a[n].y);
val-=a[n].x;
n--;
}
else if(dp[n-1][val]){
n--;
}
}
}
}
return ans;
}
Compilation message
molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:46:12: error: the value of 'M' is not usable in a constant expression
bitset<M>dp[n+1];
^
molecules.cpp:45:15: note: 'M' was not initialized with a constant expression
const int M=u+1;
^
molecules.cpp:46:13: error: the value of 'M' is not usable in a constant expression
bitset<M>dp[n+1];
^
molecules.cpp:45:15: note: 'M' was not initialized with a constant expression
const int M=u+1;
^
molecules.cpp:46:13: note: in template argument for type 'long unsigned int'
bitset<M>dp[n+1];
^
molecules.cpp:47:12: error: invalid types 'int[int]' for array subscript
dp[0][0]=1;
^
molecules.cpp:54:17: error: invalid types 'int[int]' for array subscript
if(dp[n][i]){
^
molecules.cpp:61:43: error: invalid types 'int[int]' for array subscript
if(val>=a[n].x&&dp[n-1][val-a[n].x]){
^
molecules.cpp:66:28: error: invalid types 'int[int]' for array subscript
else if(dp[n-1][val]){
^