记录编号 |
575106 |
评测结果 |
AAAAAA |
题目名称 |
[NOI 1998]免费馅饼 |
最终得分 |
100 |
用户昵称 |
[]~( ̄▽ ̄)~* |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2022-09-03 12:29:31 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXT=1001,MAXW=101,INF=0x7FFFFFFF;
using namespace std;
int W,H,N,T,Ans,AT,AP;
int F[MAXT][MAXW],V[MAXT][MAXW],G[MAXT][MAXW];
int main()
{
int i,j,t,p,v,s,dt;
freopen("freepizza.in","r",stdin);
freopen("freepizza.out","w",stdout);
scanf("%d%d",&W,&H);
while (scanf("%d%d%d%d",&t,&p,&v,&s)!=EOF)
if ((H-1)%v==0 || t==0)
{
dt=t+(H-1)/v;
if (dt>T) T=dt;
V[dt][p]+=s;
}
for (j=0;j<=T;j++)
for (i=1;i<=W;i++)
F[j][i]=-INF;
p=(W+1)/2;
Ans=F[0][p]=V[0][p];
for (i=1;i<=T;i++)
{
for (j=1;j<=W;j++)
{
if (j-2>0 && F[i-1][j-2]>F[i][j])
{
F[i][j]=F[i-1][j-2];
G[i][j]=2;
}
if (j-1>0 && F[i-1][j-1]>F[i][j])
{
F[i][j]=F[i-1][j-1];
G[i][j]=1;
}
if (F[i-1][j]>F[i][j])
{
F[i][j]=F[i-1][j];
G[i][j]=0;
}
if (j+1<=W && F[i-1][j+1]>F[i][j])
{
F[i][j]=F[i-1][j+1];
G[i][j]=-1;
}
if (j+2<=W && F[i-1][j+2]>F[i][j])
{
F[i][j]=F[i-1][j+2];
G[i][j]=-2;
}
F[i][j]+=V[i][j];
if (F[i][j]>Ans)
{
Ans=F[i][j];
AT=i;
AP=j;
}
}
}
int Ar[MAXT];
for (i=AT,j=AP;i>0;i--)
{
Ar[i]=G[i][j];
j-=G[i][j];
}
printf("%d\n",Ans);
if (T==0 && Ans!=0)
printf("0\n");
for (i=1;i<=AT;i++)
printf("%d\n",Ar[i]);
return 0;
}