比赛 |
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;
}