【CF】174 Div.1 B Cow Program
2015-07-05 16:48
309 查看
思路是树形DP+状态压缩。其实仅有2个状态,奇数次来到x或者偶数次来到x。(因为对x的更新不同)。
同时开辟visit数组,解决环。注意,一旦遇到环结果就是-1。DP数组存放第奇数/偶数次来到x时,对y的改变两。
同时开辟visit数组,解决环。注意,一旦遇到环结果就是-1。DP数组存放第奇数/偶数次来到x时,对y的改变两。
/* 283B */ #include <iostream> #include <string> #include <map> #include <queue> #include <set> #include <stack> #include <vector> #include <deque> #include <algorithm> #include <cstdio> #include <cmath> #include <ctime> #include <cstring> #include <climits> #include <cctype> #include <cassert> #include <functional> #include <iterator> #include <iomanip> using namespace std; //#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int> #define stpii set<pair<int, int> > #define mpii map<int,int> #define vi vector<int> #define pii pair<int,int> #define vpii vector<pair<int,int> > #define rep(i, a, n) for (int i=a;i<n;++i) #define per(i, a, n) for (int i=n-1;i>=a;--i) #define clr clear #define pb push_back #define mp make_pair #define fir first #define sec second #define all(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 const int maxn = 2e5+5; int a[maxn]; __int64 dp[maxn][2]; bool visit[maxn][2]; int n; __int64 dfs(int x, int d) { if (x<=0 || x>n) return 0; if (dp[x][d] != 0) return dp[x][d]; if (visit[x][d]) { dp[x][d] = -1; return -1; } visit[x][d] = true; int x_ = d ? x + a[x] : x - a[x]; int d_ = !d; __int64 ret = dfs(x_, d_); ret = ret < 0 ? -1 : ret + a[x]; dp[x][d] = ret; return ret; } int main() { ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif __int64 x, y, tmp; scanf("%d", &n); rep(i, 2, n+1) scanf("%d", &a[i]); memset(visit, false, sizeof(visit)); dp[1][1] = -1; dp[1][0] = 0; rep(i, 1, n) { y = i; x = i + 1; tmp = dfs(x, 0); y = tmp<0 ? -1 : y+tmp; printf("%I64d\n", y); } #ifndef ONLINE_JUDGE printf("time = %d.\n", (int)clock()); #endif return 0; }
相关文章推荐
- 【牛腩】真假分页
- javaSE学习笔记之面向对象程序设计(二)
- 省队集训Day3 tree
- Git 常用命令
- 【iOS】网络加载图片缓存与SDWebImage
- QT获取组合键
- 关于library导入时遇到的错误
- Linux系统用到命令积累
- c++ const 类型转化初始化
- 利用Unix/Linux的IPC机制仿真一个音乐厅门票订售系统
- DataReader的用法程序简析
- 分享学习笔记本
- 让IIS支持bootstrap 增加svg和woff格式文件的支持
- 数值数据编码
- Actionscript Flash Event.ENTER_FRAME 延迟间隔非常大 并且 pre-render 耗时非常严重
- 直接插入排序与希尔排序
- 设计一个算法,求非空二叉树b的宽度(即具有节点最多的那一层的节点个数)
- 权限设计解决方案
- Ehcache缓存配置
- Oracle ->> 层级查询语句(hierarchical query)connect by