比赛 |
EYOI与SBOI开学欢乐赛2nd |
评测结果 |
C |
题目名称 |
免费馅饼 |
最终得分 |
0 |
用户昵称 |
[]~( ̄▽ ̄)~* |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-09-02 21:54:04 |
显示代码纯文本
- #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];
- int i,j;
- 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 i,j,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;
- }