记录编号 417300 评测结果 AAAAAAAA
题目名称 抓苹果 最终得分 100
用户昵称 GravatarHeHe 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2017-06-24 19:54:45 内存使用 0.88 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. inline char getc(void){
  7. static char buf[1 << 18], *fs, *ft;
  8. return (fs == ft && (ft = (fs = buf) + fread(buf, 1, 1 << 18, stdin)), fs == ft) ? EOF : *fs++;
  9. }
  10.  
  11. inline int in(void){
  12. register int res = 0;
  13. register char tmp = getc();
  14. while(!isdigit(tmp)) tmp = getc();
  15. while(isdigit(tmp))
  16. res = (res + (res << 2) << 1) + (tmp ^ 48),
  17. tmp = getc();
  18. return res;
  19. }
  20.  
  21. void dfs(int i);
  22.  
  23. int T, W, ans;
  24. int s[1010];
  25. int f[1010][40][2];
  26.  
  27. int main(){
  28. #ifndef LOCAL
  29. freopen("bcatch.in", "r", stdin);
  30. freopen("bcatch.out", "w", stdout);
  31. #endif
  32. T = in(), W = in();
  33.  
  34. for(int i = 1; i <= T; ++i) s[i] = in();
  35. dfs(T);
  36. for(int i = 0; i <= W; ++i) ans = max(ans, max(f[T][i][0], f[T][i][1]));
  37.  
  38. printf("%d", ans);
  39. return 0;
  40. }
  41.  
  42. void dfs(int i){
  43. if(i == 1){
  44. if(s[1] == 1) f[1][W][0] = 1;
  45. else f[1][W][1] = 1;
  46. return ;
  47. }
  48.  
  49. dfs(i - 1);
  50. if(s[i] == 1){
  51. f[i][W][0] = f[i - 1][W][0] + 1;
  52. f[i][W][1] = f[i - 1][W][1];
  53. for(int j = 0; j < W; ++j){
  54. f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j + 1][1]) + 1;
  55. f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j + 1][0]);
  56. }
  57. } else {
  58. f[i][W][0] = f[i - 1][W][0];
  59. f[i][W][1] = f[i - 1][W][1] + 1;
  60. for(int j = 0; j < W; ++j){
  61. f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j + 1][1]);
  62. f[i][j][1] = max(f[i - 1][j][1], f[i - 1][j + 1][0]) + 1;
  63. }
  64. }
  65.  
  66. return ;
  67. }