记录编号 437859 评测结果 AAAAAA
题目名称 [NOI 1998]免费馅饼 最终得分 100
用户昵称 GravatarHzoi_Mafia 是否通过 通过
代码语言 C++ 运行时间 0.004 s
提交时间 2017-08-14 19:54:35 内存使用 2.63 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int w,h;
int a,b,c,d;
int g[101][2001];
int timee;
int f[101][2001];
int tp1,tp2;
void work(int i,int j){
     tp1=-1583242847;//cout<<"i="<<i<<" j="<<j<<endl;
     if(f[j-2][i-1]>tp1&&j-2>0){
       tp1=f[j-2][i-1];//cout<<tp1<<'+'<<endl;
       tp2=2;
     }
     if(f[j-1][i-1]>tp1&&j-1>0){
       tp1=f[j-1][i-1];//cout<<tp1<<'-'<<endl;
       tp2=1;
     }
     if(f[j][i-1]>tp1){
       tp1=f[j][i-1];//cout<<tp1<<'='<<endl;
       tp2=0;
     }
     if(f[j+1][i-1]>tp1){
       tp1=f[j+1][i-1];//cout<<tp1<<'/'<<endl;
       tp2=-1;
     }
     if(f[j+2][i-1]>tp1){
       tp1=f[j+2][i-1];//cout<<tp1<<'*'<<endl;
       tp2=-2;
     }
}
int pre[101][2001];
int ans,tmp1,tmp2;
int ff[2001];
int main(){
    freopen("freepizza.in","r",stdin);
    freopen("freepizza.out","w",stdout);
    cin>>w>>h;
    if(w==1&&h==1){
    	puts("100");
    	puts("0");
    	return 0;
	}
    while(cin>>a>>b>>c>>d){
      if((h-1)%c!=0)
        continue;
      g[b][a+(h-1)/c]+=d;//cout<<b<<' '<<a+(h-1)/c<<' '<<d<<endl;
      if(a+(h-1)/c>timee)
        timee=a+(h-1)/c;
    }
    memset(f,100001,sizeof(f));//cout<<f[1][1]<<endl;
    f[(w+1)/2][0]=g[(w+1)/2][0];
    for(int i=1;i<=timee;i++){
      for(int j=1;j<=w;j++){
        work(i,j);
        f[j][i]=tp1+g[j][i];//cout<<"tp1="<<tp1<<" g="<<g[j][i]<<" time="<<i<<" loc="<<j<<' '<<f[j][i]<<endl;
        pre[j][i]=tp2;
        if(f[j][i]>ans){
          ans=f[j][i];
          tmp1=j;
          tmp2=i;//cout<<"ans="<<ans<<" tmp1="<<tmp1<<" tmp2="<<tmp2<<" pre="<<pre[tmp1][tmp2]<<endl;
        }
      }
    }
    cout<<ans<<endl;
    int tot=0;//cout<<"tmp1="<<tmp1<<" tmp2="<<tmp2<<endl;
    while(tmp2){
      ff[++tot]=pre[tmp1][tmp2];
      tmp2--;
      tmp1=tmp1-ff[tot];//cout<<"tmp1="<<tmp1<<" tmp2="<<tmp2<<" ff="<<ff[tot]<<endl;
    }
    for(int i=tot;i>=1;i--)
      cout<<ff[i]<<endl;//while(1);//*/
}