比赛 EYOI与SBOI开学欢乐赛2nd 评测结果 EEEEEE
题目名称 免费馅饼 最终得分 0
用户昵称 00000 运行时间 1.096 s
代码语言 C++ 内存使用 24.88 MiB
提交时间 2022-09-02 21:47:16
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int we,h;
int bt[30000],p[30000],v[30000],s[30000];
int t[3000][1500];
int mark[200000],tt,tn;
int ans;
int am[200000];
void dfs(int x,int f,int np,int nt)//时间、值、当前位置 
{
	if(t[x-1][np]!=0) nt=x-1;
	if(x>tt)
	{
		if(f>ans)
		{
			ans=f;
			tn=nt;
			for(int q=1;q<=nt;q++)
			{
				am[q]=mark[q];
			}
		}
		return;
	} 
	if(np-2>=1)
	{
		mark[x]=-2;
		dfs(x+1,f+t[x][np-2],np-2,nt);
	} 
	if(np-1>=1)
	{
		mark[x]=-1;
		dfs(x+1,f+t[x][np-1],np-1,nt);
	} 


		mark[x]=0;
		dfs(x+1,f+t[x][np],np,nt);
		
		
		
	if(np+1<=we)
	{
		mark[x]=1;
		dfs(x+1,f+t[x][np+1],np+1,nt);
	} 
	
	if(np+2<=we)
	{
		mark[x]=2;
		dfs(x+1,f+t[x][np+2],np+2,nt);
	} 
	
}
int main(){
	freopen("freepizza.in","r",stdin);
	freopen("freepizza.out","w",stdout);
cin>>we>>h;
int c=1;
while(cin>>bt[c]>>p[c]>>v[c]>>s[c]) c++;
//c--;
for(int q=1;q<=c;q++)
{
	if((h-1)%v[q]==0)
	{
		t[bt[q]+(h-1)/v[q]][p[q]]+=s[q];
		tt=max(tt,bt[q]+(h-1)/v[q]);
	}
}
dfs(1,0,we/2+1,0);
cout<<ans<<endl;
for(int q=1;q<=tn;q++)
{
	cout<<am[q]<<endl;
}
//for(int q=1;q<=5;q++)
//{
//	for(int w=1;w<=we;w++) cout<<t[q][w]<<" ";
//	cout<<endl;
//}
return 0;
}