记录编号 | 194293 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [NOIP 2012]寻宝 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | 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; }