记录编号 194293 评测结果 AAAAAAAAAA
题目名称 [NOIP 2012]寻宝 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.916 s
提交时间 2015-10-16 12:01:48 内存使用 5.60 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
const int SIZEN=10010,SIZEM=110,INF=0x7fffffff/2,mod=20123;
int N,M,st;
int P[SIZEN][SIZEM]={0};
int S[SIZEN]={0};
bool to[SIZEN][SIZEM]={0};
int ans=-INF;
void read()
{
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;i++)
		for(int j=0;j<M;j++)
		{
		scanf("%d%d",&to[i][j],&P[i][j]);
		if(to[i][j]) S[i]++;
		}
	scanf("%d",&st);
}
void dfs(int x,int m,int now)
{
	//cout<<x<<" "<<m<<endl;
	if(x==N+1) {ans=now;return;}
	now=(now+P[x][m])%mod;
	int nm=(P[x][m]-1)%S[x]+1;
	for(int j=0,cnt=0;j<=M;j++)
	{
		int tem=(m+j)%M;
		if(to[x][tem]) cnt++;
		if(cnt==nm){dfs(x+1,tem,now);break;}
	}
}
void work()
{
	dfs(1,st,0);
	printf("%d",ans);
}
int main()
{
	freopen("treasures.in","r",stdin);
	freopen("treasures.out","w",stdout);
	read();
	work();
	return 0;
}