首页 > 代码库 > BZOJ3427 Poi2013 Bytecomputer
BZOJ3427 Poi2013 Bytecomputer
可以YY一下嘛= =
最后一定是-1, -1, ..., -1, 0, 0, ... 0, 1, 1, ..., 1的一个数列
于是f[i][j]表示到了第i个数,新数列的第j项为-1 or 0 or 1的的最小代价
然后就没有然后了
1 /************************************************************** 2 Problem: 3427 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:808 ms 7 Memory:16432 kb 8 ****************************************************************/ 9 10 #include <cstdio>11 #include <cstring>12 #include <algorithm>13 14 using namespace std;15 const int N = 1000005;16 const int inf = 1e9;17 18 int a[N], f[N][3];19 int n, ans = inf;20 21 inline int read() {22 int x = 0, sgn = 1;23 char ch = getchar();24 while (ch < ‘0‘ || ‘9‘ < ch) {25 if (ch == ‘-‘) sgn = -1;26 ch = getchar();27 }28 while (‘0‘ <= ch && ch <= ‘9‘) {29 x = x * 10 + ch - ‘0‘;30 ch = getchar();31 }32 return sgn * x;33 }34 35 int main() {36 int i, j, k;37 int t, to;38 n = read();39 for (i = 1; i <= n; ++i)40 a[i] = read();41 memset(f, 127, sizeof(f));42 f[1][a[1] + 1] = 0;43 for (i = 1; i < n; ++i)44 for (j = 0; j <= 2; ++j) if (f[i][j] < inf)45 for (t = j - 1, k = 0; k <= 2; ++k) {46 to = a[i + 1] + k * t;47 if (to >= -1 && to <= 1 && to >= t)48 f[i + 1][to + 1] = min(f[i + 1][to + 1], f[i][j] + k);49 }50 for (i = 0; i <= 2; ++i)51 ans = min(ans, f[n][i]);52 if (ans == inf) puts("BRAK");53 else printf("%d\n", ans);54 return 0;55 }
BZOJ3427 Poi2013 Bytecomputer
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。