codeforces B. Cow Program (记忆化搜索)
来源:互联网 发布:淘宝卖家怎么提高流量 编辑:程序博客网 时间:2024/06/05 11:43
题目链接:
codeforces 283B
题目大意:
给出n个数,奇数次操作x,y都加上a[x],偶数次操作y加上a[x],x减去a[x],走出了范围就结束。
问结束时的y值,如果无法结束,那么输出-1
题目分析:
- 记录状态dp[x][2]为在奇数次或偶数次到达x点时走完还会获得的权值。
- 直接搜索,搜索到搜过的状态直接返回。
AC代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define MAX 200007using namespace std;typedef long long LL;LL dp[MAX][2];int vis[MAX][2];int a[MAX],n;void dfs ( int x , int d ){ if ( vis[x][d%2] ) return; vis[x][d%2] = 1; if ( d&1 ) { int y = x-a[x]; if ( y <= 0 ) { dp[x][d%2] = a[x]; return; } dfs ( y , d+1 ); if ( dp[y][(d+1)%2] != -1 ) dp[x][d%2] = dp[y][(d+1)%2] + a[x]; } else { int y = x+a[x]; if ( y > n ) { dp[x][d%2] = a[x]; return; } dfs ( y , d+1 ); if ( dp[y][(d+1)%2] != -1 ) dp[x][d%2] = dp[y][(d+1)%2] + a[x]; }}int main ( ){ while ( ~scanf ( "%d" , &n ) ) { for ( int i = 2 ; i <= n ; i++ ) scanf ( "%d" , &a[i] ); memset ( vis , 0 , sizeof ( vis ) ); memset ( dp , -1, sizeof ( dp ) ); dp[1][0] = -1; vis[1][0] = 1; dp[1][1] = 0; vis[1][1] = 1; for ( int i = 2 ; i <= n ; i++ ) dfs ( i , 1 ); for ( int i = 2 ; i <= n ; i++ ) if ( dp[i][1] != -1 ) dp[i][1] += i-1; for ( int i = 2 ; i <= n ; i++ ) printf ( "%lld\n" , dp[i][1] ); }}
0 0
- codeforces B. Cow Program (记忆化搜索)
- Codeforces 284D Cow Program【思维+记忆化搜索】
- CodeForces 283B Cows and Program 记忆化搜索 推导
- Codeforces Round #174 (Div. 2)---D. Cow Program(dp, 记忆化搜索)
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
- Codeforces 208 B Solitaire(记忆化搜索)
- codeforces 392B Tower of Hanoi 记忆化搜索
- CodeForces 398B 概率DP 记忆化搜索
- codeforces 520B Two Buttons[记忆化搜索]
- codeforces Codeforces Round #130 (Div. 2) B 208B Solitaire 记忆化搜索
- Codeforces 392B Tower of Hanoi(递归+记忆化搜索)
- Codeforces Round #230 (Div. 1) B. Tower of Hanoi 记忆化搜索
- Codeforces Round #390 (Div. 2)(A,B,C(记忆化搜索),D(贪心,优先队列))
- Codeforces Round #442 (Div. 2) B. Nikita and string (记忆化搜索)
- POJ 3176-Cow Bowling(DP||记忆化搜索)
- codeforces (数位dp 记忆化搜索)
- CodeForces 374C 记忆化搜索
- codeforces 339C 记忆化搜索
- c语言学习笔记分享之函数
- UIButton是UIImageView的子控件无法与用户交互
- "数据结构翻转课堂"答疑实录——顺序表
- 黑马程序员---java面试题1
- java 实现文件复制的两种方式
- codeforces B. Cow Program (记忆化搜索)
- Linux、Apache、Mysql、PHP(LAMP) -- 部署文档
- Objective-C的initialize和init
- C语言学习笔记分享之多文件开发与进制
- 编辑距离(DP)
- 缓存着色技术(Cache Coloring)
- 装win8 win7系统
- Discuz X3.2 论坛搬家教程
- OpengGL第八版的第一个例子