记录编号 31598 评测结果 AAAAAAAAAAA
题目名称 [USACO Feb08] 麻烦的聚餐 最终得分 100
用户昵称 Gravatar王者自由 是否通过 通过
代码语言 C++ 运行时间 0.042 s
提交时间 2011-11-03 11:14:31 内存使用 0.83 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #define INF 0x7ffffff
  3. int n, s = INF, d[30010], f[30010][4];
  4. int main() {
  5. freopen("egroup.in", "r", stdin);
  6. freopen("egroup.out", "w", stdout);
  7. scanf("%d\n", &n);
  8. for(int i=1; i<=n; i++)
  9. scanf("%d", d+i);
  10. for(int j=1; j<=3; j++) {
  11. for(int i=1; i<=n; i++) {
  12. f[i][j] = INF;
  13. for(int k=1; k<=j; k++)
  14. if(f[i][j] > f[i-1][k])
  15. f[i][j] = f[i-1][k];
  16. if(d[i] != j)
  17. f[i][j]++;
  18. }
  19. if(s > f[n][j])
  20. s = f[n][j];
  21. }
  22. for(int j=3; j>=1; j--) {
  23. for(int i=1; i<=n; i++) {
  24. f[i][j] = INF;
  25. for(int k=j; k<=3; k++)
  26. if(f[i][j] > f[i-1][k])
  27. f[i][j] = f[i-1][k];
  28. if(d[i] != j)
  29. f[i][j]++;
  30. }
  31. if(s > f[n][j])
  32. s = f[n][j];
  33. }
  34. printf("%d\n", s);
  35. return 0;
  36. }