记录编号 352126 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2014]飞扬的小鸟 最终得分 100
用户昵称 Gravatarkito 是否通过 通过
代码语言 C++ 运行时间 0.808 s
提交时间 2016-11-16 21:28:12 内存使用 39.05 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
#define	fcl	fclose(stdin);	fclose(stdout);	return 0
	#define SUBMIT 2333
int n,m,K;
int x[10010],y[10010];
int F[10010][1010];
int flag[10010],L[10010],R[10010];
const int INF=0x3f3f3f3f;
int ans=0;
inline int GetMax(const int& a,const int& b){
	if(a>b)	return a;
	return b;
}

inline int GetMin(const int& a,const int& b){
	if(a<b)	return a;
	return b;
}


int main(){
	#ifdef SUBMIT
	freopen("birda.in","r",stdin);
	freopen("birda.out","w",stdout);
	#endif
	scanf("%d%d%d",&n,&m,&K);
	for(int i=1;i<=n;++i){
		scanf("%d%d",&x[i],&y[i]);
	}
	int a,b,c;
	for(int i=1;i<=K;++i){
		scanf("%d%d%d",&a,&b,&c);
		flag[a]=true;
		L[a]=b;	R[a]=c;
	}
	memset(F,0x3f,sizeof(F));
	for(int i=1;i<=m;++i){
		F[0][i]=0;
	}
	bool Target;
	for(int i=1;i<=n;++i){
		for(int j=x[i]+1;j<m;++j){
			F[i][j]=GetMin(F[i][j],GetMin(F[i-1][j-x[i]],F[i][j-x[i]])+1);
		}
		for(int k=x[i];k>=0;--k){
			//可能从上一格的顶端平移过来 
			F[i][m]=GetMin(F[i][m],GetMin(F[i-1][m-k],F[i][m-k])+1);
		}
		for(int j=1;j<=m-y[i];++j){
			F[i][j]=GetMin(F[i][j],F[i-1][j+y[i]]);
		}
		if(flag[i]){
			for(int j=1;j<=L[i];++j){
				F[i][j]=INF;
			}
			for(int j=R[i];j<=m;++j){
				F[i][j]=INF;
			}
			Target=false;
			for(int j=L[i]+1;j<R[i];++j){
				if(F[i][j]<INF){
					Target=true;
					break;
				}
			}
			if(!Target){
				printf("%d\n%d",0,ans);
				#ifndef SUBMIT
				getchar();	getchar();
				#endif
				fcl;
			}
			ans++;
		}
	}
	ans=INF;
	for(int i=1;i<=m;++i){
		ans=GetMin(ans,F[n][i]);
	}
	printf("1\n%d",ans);
	#ifndef SUBMIT
	getchar();	getchar();
	#endif
	fcl;
}
/*
10 10 6
3 9
9 9
1 2
1 3
1 2
1 1
2 1
2 1
1 6
2 2
1 2 7
5 1 5
6 3 5
7 5 8
8 7 9
9 1 3


10 10 4
1 2
3 1
2 2
1 8
1 8
3 2
2 1
2 1
2 2
1 2
1 0 2
6 7 9
9 1 4
3 8 10

*/