样例没过10 分求助
查看原帖
样例没过10 分求助
556362
Unnamed114514楼主2022/5/3 09:13
#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int res=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
		ch=getchar();
	while(ch>='0'&&ch<='9'){
		res=(res<<1)+(res<<3)+(ch^'0');
		ch=getchar();
	}
	return res;
}
int n,ans,top;
struct node{
	int t,g,m;
	inline bool operator <(const node &o) const{
		return t<o.t;
	}
}a[20],s[20];
inline int ask(int a,int b,int c){
	int delta=b*b-4*a*c;
	if(delta<0)
		return -1;
	return int(floor(-b+sqrt(delta))/(2*a));
}
inline bool check(){
	int k=1,p=0;
	for(int i=1;i<=top;++i){
		int sum=0,t=s[i].t-s[i-1].t;
		for(int j=i;j<=top;++j){
			sum+=s[j].g;
			if(sum>p)
				t=min(t,ask(-1,s[j].t-s[i-1].t-k,k*(s[j].t-s[i-1].t)+p-sum));
		}
		if(t<0)
			return 0;
		k+=t;
		p+=k*(s[i].t-s[i-1].t-t);
		p-=s[i].g;
	}
	return 1;
}
int main(){
	n=read();
	for(int i=1;i<=n;++i)
		a[i]={read(),read(),read()};
	stable_sort(a+1,a+n+1);
	for(int i=1;i<(1<<n);++i){
		int sum=0;
		top=0;
		for(int j=1;j<=n;++j)
			if(i&(1<<j-1))
				s[++top]=a[j],sum+=a[j].m;
		if(check())
			ans=max(ans,sum);
	}
	printf("%d\n",ans);
	return 0;
}
2022/5/3 09:13
加载中...