记录编号 250497 评测结果 WWWWWAW
题目名称 [NOI 1998]免费馅饼 最终得分 14
用户昵称 GravatarAntiLeaf 是否通过 未通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-04-15 10:54:55 内存使用 0.00 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
namespace mine{
	int c,x,a[110],i,j;
	bool neg;
	inline int getint(){
		x=neg=0;
		do c=getchar();while(c==' '||c=='\n'||c=='\r'||c=='\t');
		if(c=='-'){
			neg=true;
			c=getchar();
		}
		for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
		if(neg)return -x;
		return x;
	}
	inline int fgeti(FILE* fin){
		x=neg=0;
		do c=fgetc(fin);while(c==' '||c=='\n'||c=='\r'||c=='\t');
		if(c=='-'){
			neg=true;
			c=fgetc(fin);
		}
		for(;c>='0'&&c<='9';c=fgetc(fin))x=(x<<1)+(x<<3)+(c^48);
		if(neg)return -x;
		return x;
	}
	inline void putint(int x){
		neg=x<0;
		if(neg)x=-x;
		i=0;
		do{
			a[i++]=x%10+48;
			x/=10;
		}while(x);
		if(neg)putchar('-');
		for(j=i-1;j>=0;j--)putchar(a[j]);
	}
	inline void fputi(FILE* fout,int x){
		neg=x<0;
		if(neg)x=-x;
		i=0;
		do{
			a[i++]=x%10+48;
			x/=10;
		}while(x);
		if(neg)putchar('-');
		for(j=i-1;j>=0;j--)fputc(a[j],fout);
	}
	inline void fputi(int x,FILE* fout){
		neg=x<0;
		if(neg)x=-x;
		i=0;
		do{
			a[i++]=x%10+48;
			x/=10;
		}while(x);
		if(neg)putchar('-');
		for(j=i-1;j>=0;j--)fputc(a[j],fout);
	}
	inline void put(const char* s){
		x=strlen(s);
		for(i=0;i<x;i++)putchar(s[i]);
	}
	inline void fput(FILE* fout,const char* s){
		x=strlen(s);
		for(i=0;i<x;i++)fputc(s[i],fout);
	}
	inline void fput(const char* s,FILE* fout){
		x=strlen(s);
		for(i=0;i<x;i++)fputc(s[i],fout);
	}
	inline void puts(const char* s){
		x=strlen(s);
		for(i=0;i<x;i++)putchar(s[i]);
		putchar('\n');
	}
	inline void fputs(FILE* fout,const char* s){
		x=strlen(s);
		for(i=0;i<x;i++)fputc(s[i],fout);
		fputc('\n',fout);
	}
	inline void fputs(const char* s,FILE* fout){
		x=strlen(s);
		for(i=0;i<x;i++)fputc(s[i],fout);
		fputc('\n',fout);
	}
}
int MAIN();
int haha=MAIN();
int dfs(int,int);
int f[1110][110],c[1110][110]={{0}},vis[1110][110]={{0}},next[1110][110],tt,ttt=0,t=0,a,v,w,h,s,temp;
int main(){;}
inline int MAIN(){
#define COGS
#ifdef COGS
	freopen("freepizza.in","r",stdin);
	freopen("freepizza.out","w",stdout);
#endif
	scanf("%d%d",&w,&h);
	h--;
	while(scanf("%d%d%d%d",&tt,&a,&v,&s)!=EOF){
		if(h%v)continue;
		c[tt+h/v][a]+=s;
		if(tt+h/v>ttt)ttt=tt+h/v;
	}
	printf("%d\n",dfs(0,(w+1)>>1));
	for(int i=0,j=(w+1)>>1;i<=t;i++,j+=next[i][j])printf("%d\n",next[i][j]);
	return 0;
}
inline int dfs(int i,int j){
	if(j<1||j>w||i>ttt)return -80000000;
	if(vis[i][j])return f[i][j];
	vis[i][j]=true;
	temp=0;
	for(int k=-2;k<=2;k++)if(dfs(i+1,j+k)>temp){
		temp=f[i+1][j+k];
		next[i][j]=k;
	}
	f[i][j]=f[i+1][j+next[i][j]]+c[i][j];
	if(f[i][j]>0&&i>t)t=i;
	return f[i][j];
}