比赛 EYOI与SBOI开学欢乐赛2nd 评测结果 C
题目名称 免费馅饼 最终得分 0
用户昵称 []~( ̄▽ ̄)~* 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-02 21:54:04
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXT=1001,MAXW=101,INF=0x7FFFFFFF;
  4. using namespace std;
  5. int W,H,N,T,Ans,AT,AP;
  6. int F[MAXT][MAXW],V[MAXT][MAXW],G[MAXT][MAXW];
  7. int main()
  8. {
  9. int i,j,t,p,v,s,dt;
  10. freopen("freepizza.in","r",stdin);
  11. freopen("freepizza.out","w",stdout);
  12. scanf("%d%d",&W,&H);
  13. while (scanf("%d%d%d%d",&t,&p,&v,&s)!=EOF)
  14. if ((H-1)%v==0 || t==0)
  15. {
  16. dt=t+(H-1)/v;
  17. if (dt>T) T=dt;
  18. V[dt][p]+=s;
  19. }
  20. for (j=0;j<=T;j++)
  21. for (i=1;i<=W;i++)
  22. F[j][i]=-INF;
  23. p=(W+1)/2;
  24. Ans=F[0][p]=V[0][p];
  25. int i,j;
  26. for (i=1;i<=T;i++)
  27. {
  28. for (j=1;j<=W;j++)
  29. {
  30. if (j-2>0 && F[i-1][j-2]>F[i][j])
  31. {
  32. F[i][j]=F[i-1][j-2];
  33. G[i][j]=2;
  34. }
  35. if (j-1>0 && F[i-1][j-1]>F[i][j])
  36. {
  37. F[i][j]=F[i-1][j-1];
  38. G[i][j]=1;
  39. }
  40. if (F[i-1][j]>F[i][j])
  41. {
  42. F[i][j]=F[i-1][j];
  43. G[i][j]=0;
  44. }
  45. if (j+1<=W && F[i-1][j+1]>F[i][j])
  46. {
  47. F[i][j]=F[i-1][j+1];
  48. G[i][j]=-1;
  49. }
  50. if (j+2<=W && F[i-1][j+2]>F[i][j])
  51. {
  52. F[i][j]=F[i-1][j+2];
  53. G[i][j]=-2;
  54. }
  55. F[i][j]+=V[i][j];
  56. if (F[i][j]>Ans)
  57. {
  58. Ans=F[i][j];
  59. AT=i;
  60. AP=j;
  61. }
  62. }
  63. }
  64. int i,j,Ar[MAXT];
  65. for (i=AT,j=AP;i>0;i--)
  66. {
  67. Ar[i]=G[i][j];
  68. j-=G[i][j];
  69. }
  70. printf("%d\n",Ans);
  71. if (T==0 && Ans!=0)
  72. printf("0\n");
  73. for (i=1;i<=AT;i++)
  74. printf("%d\n",Ar[i]);
  75. return 0;
  76. }