思路是树形DP+状态压缩。其实仅有2个状态,奇数次来到x或者偶数次来到x。(因为对x的更新不同)。
同时开辟visit数组,解决环。注意,一旦遇到环结果就是-1。DP数组存放第奇数/偶数次来到x时,对y的改变两。

  1. /* 283B */
  2. #include <iostream>
  3. #include <string>
  4. #include <map>
  5. #include <queue>
  6. #include <set>
  7. #include <stack>
  8. #include <vector>
  9. #include <deque>
  10. #include <algorithm>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <ctime>
  14. #include <cstring>
  15. #include <climits>
  16. #include <cctype>
  17. #include <cassert>
  18. #include <functional>
  19. #include <iterator>
  20. #include <iomanip>
  21. using namespace std;
  22. //#pragma comment(linker,"/STACK:102400000,1024000")
  23.  
  24. #define sti set<int>
  25. #define stpii set<pair<int, int> >
  26. #define mpii map<int,int>
  27. #define vi vector<int>
  28. #define pii pair<int,int>
  29. #define vpii vector<pair<int,int> >
  30. #define rep(i, a, n) for (int i=a;i<n;++i)
  31. #define per(i, a, n) for (int i=n-1;i>=a;--i)
  32. #define clr clear
  33. #define pb push_back
  34. #define mp make_pair
  35. #define fir first
  36. #define sec second
  37. #define all(x) (x).begin(),(x).end()
  38. #define SZ(x) ((int)(x).size())
  39. #define lson l, mid, rt<<1
  40. #define rson mid+1, r, rt<<1|1
  41.  
  42. const int maxn = 2e5+;
  43. int a[maxn];
  44. __int64 dp[maxn][];
  45. bool visit[maxn][];
  46. int n;
  47.  
  48. __int64 dfs(int x, int d) {
  49. if (x<= || x>n)
  50. return ;
  51.  
  52. if (dp[x][d] != )
  53. return dp[x][d];
  54.  
  55. if (visit[x][d]) {
  56. dp[x][d] = -;
  57. return -;
  58. }
  59.  
  60. visit[x][d] = true;
  61. int x_ = d ? x + a[x] : x - a[x];
  62. int d_ = !d;
  63. __int64 ret = dfs(x_, d_);
  64.  
  65. ret = ret < ? - : ret + a[x];
  66. dp[x][d] = ret;
  67.  
  68. return ret;
  69. }
  70.  
  71. int main() {
  72. ios::sync_with_stdio(false);
  73. #ifndef ONLINE_JUDGE
  74. freopen("data.in", "r", stdin);
  75. freopen("data.out", "w", stdout);
  76. #endif
  77.  
  78. __int64 x, y, tmp;
  79.  
  80. scanf("%d", &n);
  81. rep(i, , n+)
  82. scanf("%d", &a[i]);
  83.  
  84. memset(visit, false, sizeof(visit));
  85. dp[][] = -;
  86. dp[][] = ;
  87.  
  88. rep(i, , n) {
  89. y = i;
  90. x = i + ;
  91. tmp = dfs(x, );
  92. y = tmp< ? - : y+tmp;
  93. printf("%I64d\n", y);
  94. }
  95.  
  96. #ifndef ONLINE_JUDGE
  97. printf("time = %d.\n", (int)clock());
  98. #endif
  99.  
  100. return ;
  101. }

【CF】174 Div.1 B Cow Program的更多相关文章

  1. 【CF】121 Div.1 C. Fools and Roads

    题意是给定一棵树.同时,给定如下k个查询: 给出任意两点u,v,对u到v的路径所经过的边进行加计数. k个查询后,分别输出各边的计数之和. 思路利用LCA,对cnt[u]++, cnt[v]++,并对 ...

  2. 【CF】310 Div.1 C. Case of Chocolate

    线段树的简单题目,做一个离散化,O(lgn)可以找到id.RE了一晚上,额,后来找到了原因. /* 555C */ #include <iostream> #include <str ...

  3. 【CF】110 Div.1 B. Suspects

    这题目乍眼一看还以为是2-sat.其实很水的,O(n)就解了.枚举每个人,假设其作为凶手.观察是否满足条件.然后再对满足的数目分类讨论,进行求解. /* 156B */ #include <io ...

  4. 【CF】222 Div.1 B Preparing for the Contest

    这样类似的题目不少,很多都是一堆优化条件求最优解,这个题的策略就是二分+贪心.对时间二分, 对费用采用贪心. /* 377B */ #include <iostream> #include ...

  5. 【CF】207 Div.1 B.Xenia and Hamming

    这题目一看很牛逼,其实非常easy.求求最小公倍数,最大公约数,均摊复杂度其实就是O(n). /* 356B */ #include <iostream> #include <str ...

  6. 【CF】142 Div.1 B. Planes

    SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist.还是蛮简单的,注意细节. /* 229B */ #include <iostrea ...

  7. 【CF】196 Div.2 D. Book of Evil

    显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的).但是看了一下数据大小,应该会TLE.然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径.结果灵感就来 ...

  8. 【CF】223 Div.1 C Sereja and Brackets

    水线段树. /* 380C */ #include <iostream> #include <string> #include <map> #include < ...

  9. 【CF】259 Div.1 B Little Pony and Harmony Chest

    还蛮有趣的一道状态DP的题目. /* 435B */ #include <iostream> #include <string> #include <map> #i ...

随机推荐

  1. Meta http-equiv属性

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...

  2. Android测试分析二

    什么是android测试,分为黑盒测试和白盒测试. 黑盒就是测试人员看不到代码的,针对需求而进行的一系列测试动作,看代码所展现出来的效果是否和需求一样,或者有什么意外的情况没有处理等,一般开发交给测试 ...

  3. ios objection

    给大家介绍个不错的团队开发模块化工具objection 1. setup<这里我只介绍ios相关> rake artifact:ios cp -R build/Release-iphone ...

  4. java新手笔记19 抽象类

    1.Shap package com.yfs.javase; public class Shape /*extends Object */{ //默认继承object object方法全部继承 //计 ...

  5. UVA 11300 Spreading the Wealth (数学推导 中位数)

    Spreading the Wealth Problem A Communist regime is trying to redistribute wealth in a village. They ...

  6. Codevs 5056 潜水员

    5056 潜水员 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 潜水员为了潜水要使用特殊装备.他有一个带两种气体的气缸:一个为氮气 ...

  7. Python没有执行__init__

    疑惑 提出问题 前天同事问我一个问题,为什么这个脚本中的没有调用A 的__init__.脚本如下: class A(object): def __init__(self, *args, **kwarg ...

  8. ssh命令:隧道代理+本地端口转发+远程端口转发

        0.前言 nc是一个在网络连接两端的好工具,同时也是也个临时的端口转发的好工具.(永久的端口转发用什么?用iptables) ssh也是这方面的好工具,好处是加密可靠可复用在一端操作即可,代价 ...

  9. C语言的可变参数

    可变参数给编程带来了很大的方便,在享受它带来的方便的同时,很有必要了解一下其实现方式,在了解编程语言的同时,也可以扩展编程的思路. 可变参数需要用到3个宏函数和一个类型,他们都定义在<stdar ...

  10. nfs,ftp配置

    一. NFS1. NFS简介NFS全称是network file systemNFS允许一个系统在网络上与他人共享目录和文件.通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件. 假 ...