记录编号 |
48662 |
评测结果 |
AAAAAAAA |
题目名称 |
过河 |
最终得分 |
100 |
用户昵称 |
王者自由 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.051 s |
提交时间 |
2012-11-06 12:59:37 |
内存使用 |
2.94 MiB |
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1000 + 10;
int n, m, a[N], b[N];
bool f[N][N];
bool ok(int i, int j) {
if(i == 0 || i == n + 1) return true;
int r = j % (a[i] + b[i]);
return (r > 0 && r <= a[i]);
}
int main() {
freopen("rivera.in", "r", stdin);
freopen("rivera.out", "w", stdout);
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d %d", a+i, b+i);
m = n * (*max_element(a, a+n+1) + *max_element(b, b+n+1));
f[0][0] = 1;
for(int t=1; t<=m; t++) {
int i = t & 1, l = (t - 1) & 1;
//fprintf(stderr, "(%d,%d)%d ", i, l, t);
for(int j=0; j<=n+1; j++) {
f[i][j] = 0;
if(ok(j, t))
for(int k=max(j-5, 0); k<=min(j+5, n+1); k++)
if(f[l][k]) { f[i][j] = 1; break; }
}
if(f[i][n+1]) { printf("%d\n", t); return 0; }
} printf("NO\n");
return 0;
}