第一思路就是dp。 后来觉得时间按上是过不去的。
后来发现,原有区间,加上一个值之后,产生一个新的区间,判断两个区间有没有交集即可。
那么线性就a了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=10007;
const int maxn=1e5+30;
int a[maxn];
int main(){
int T,n,x;
cin>>T;
while(T--){
ll ans=0;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;++i){
if(a[i]<=ans+1){
ans+=a[i];
}else break;
}
printf("%lld\n",ans);
}
return 0;
}