CF174 div1 B. Cow Program 记忆化搜索

Posted hznumqf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF174 div1 B. Cow Program 记忆化搜索相关的知识,希望对你有一定的参考价值。

给出n-1 个ai,i = 2 ~ n ,可以认为a1 = 1~n-1 

问对每个i,输出最后y的大小 。 其中操作循环为 1. x+a[x] , y+ a[x]  2. x- a[x] , y+a[x] 。 

退出条件为x>n 或 x<0

明显是记忆化搜素, 需要记忆操作的方向 。可以借助y每次总是+a[x]的性质简化代码

用vis数组来标记是否搜索到该状态,若曾搜索到且dp==0 直接返回 -1 即可

ll dp[maxn][2];

int vis[maxn][2];
int a[maxn];
int n;

ll dfs(int x, int dir) {
    if (x <= 0 || x > n) return  0;
    if (~dp[x][dir]) return dp[x][dir];
    if (vis[x][dir]) return -1;
    vis[x][dir] = 1;
    ll res = dfs(dir ? x + a[x] : x - a[x], dir ^ 1);
    return dp[x][dir] = (res < 0 ? -1 : res + a[x]);
}


int main() {
    scanf("%d", &n);
    memset(dp, -1, sizeof dp);
    for (int i = 2; i <= n; i++) scanf("%d", a + i);
    for (int i = 2; i <= n; i++) {
        ll tmp = dfs(i, 0);
        printf("%I64d
", tmp < 0 ? -1 :i + tmp - 1);
    }
}

 

以上是关于CF174 div1 B. Cow Program 记忆化搜索的主要内容,如果未能解决你的问题,请参考以下文章

B. Cow and Friend

题解-CF1307G Cow and Exercise

题解-CF1307G Cow and Exercise

Codeforces Round #426 Div1 B. The Bakery

[cf1307D] Cow and Fields

CF1083(div1)