Bucharest, Romania 2013 G Points DP

题意:一条线上面有n个目标,每个目标有三个值,表示不取相邻的,取一个相邻的,取两个相邻的值,问你怎么选才能最大

解题思路:每个点有个5种情况dp,dp状态转移方程在程序里,

5种情况分别是 1) 不取  2) 取自己 3) 取自己和左边,4)取自己和右边,5)取自己和左右边

解题代码:

 1 Name: 12901.cpp
 2 // Author: darkdream
 3 // Created Time: 2014年08月16日 星期六 14时18分16秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25
26 using namespace std;
27 int dp[1000005][5];
28 int a[3];
29 int max3(int x, int y,int z)
30 {
31     if(y > x )
32         x = y ;
33     if(z > x )
34         x = z ;
35     return x;
36 }
37 int main(){
38     int n ;
39     while(scanf("%d",&n)!= EOF)
40     {
41         int ans = 0 ;
42         memset(dp,0,sizeof(dp));
43         for(int i =1 ;i <= n;i ++)
44         {
45             scanf("%d %d %d",&a[0],&a[1],&a[2]);
46             dp[i][0] = max3(dp[i-1][0],dp[i-1][1],dp[i-1][2]);
47             dp[i][1] = dp[i-1][0] + a[0];
48             if(i != 1)
49                 dp[i][2] = a[1] + max(dp[i-1][3],dp[i-1][4]);
50             if(i != n)
51             {
52                 dp[i][3] = a[1] + dp[i-1][0];
53                 if(i !=1)
54                   dp[i][4] = a[2] + max(dp[i-1][3],dp[i-1][4]);
55             }
56             for(int j = 0;j <= 4;j ++)
57             {
58                 //if(dp[i][j]  > ans)
59                 //    printf("%d %d %d\n",i,j,dp[i][j]);
60                 ans = max(dp[i][j],ans);
61             }
62         }
63         printf("%d\n",ans);
64     }
65     return 0;
66 }

Bucharest, Romania 2013 G Points DP,布布扣,bubuko.com

时间: 2024-10-16 23:45:02

Bucharest, Romania 2013 G Points DP的相关文章

Bucharest, Romania 2013 J An Idea of Mr. A

题意:问你 l- r  所有费马数两两不互质的对数, 解题思路:费马数两两不互质. 解题代码: 1 // File Name: 12904.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月16日 星期六 13时34分26秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque

Bucharest, Romania 2013 H Red John Game 乱搞 未解

题意:给你一个无限的棋盘,里面有n×n的棋子,每个棋子可以跳过一个相邻(4个方向)棋子跳到下一个位置,并把他的相邻位(他跳过的那一位)删除. 解题思路:判断n%3 是否等于 0 , 原因未知. 解题代码: 1 #include<stdio.h> 2 int main(){ 3 int n ; 4 while(~scanf("%d",&n)) 5 { 6 if(n%3) 7 printf("1\n"); 8 else printf("0\

Bucharest, Romania 2013 A Russian Dolls 贪心

题意:俄罗斯有一种玩具叫做套娃,一个大的只能嵌套一个比它内体积小的套娃 ,给你每个套娃的内体积和外体积,每个套娃内体积单位空体积的消耗,问你怎么样安排才能使得花费最小. 解题思路:这里我们知道,是优先去花费最大的那个套娃并且填掉它. 解题代码: 1 // File Name: 12895.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月16日 星期六 23时41分13秒 4 5 #include<vector> 6 #include&

BZOJ 3246 IOI 2013 Dreaming 树形DP

题目大意 给出一个缺若干条边的树,现在让你填一些长度为定值的边,使得整个树的直径最小. 思路 给一个详细的网址,讲的非常明白. http://www.ccf.org.cn/resources/1190201776262/fujian/xuhaoran2013-07-25-03_33_55.pdf 还有数据范围是50w. CODE #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include

2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛)-G(DP)

题目链接:https://ac.nowcoder.com/acm/contest/553/G 题意:给定n,k,(1<=n<=5e5)然后给出n个数ai(1<=ai<=1e5),问按顺序从1..n分组,最多能有多少个组的异或和为k. 思路:自然的,我们用dp[i]表示到第i个人的时候最多有多少个组的异或和为k.计算dp[i]时,有两种情况,要么在第i个人后面分出一组,要么不分.不分的话dp[i]=dp[i-1]就可以了; 如果分得话,就要找到上一个组的终点下标,我们可以计算到第i个

BZOJ 3890 Usaco2015 Jan Meeting Time 拓扑图DP

题目大意 题上的中文题意太不明确了... 给出一个拓扑图,每条有向边有两个权值,有两个人从1出发到n,分别走这两种权值.问有没有权值使得这两个人都能走过这些权值到达n. 思路 看懂了题之后就水了.维护两个数组表示从1号节点是否能够通过i的权值到达j.然后做拓扑图DP. CODE #define _CRT_SECURE_NO_WARNINGS #include <queue> #include <cstdio> #include <cstring> #include &l

2017盛大游戏杯 零件组装(状态压缩DP之巧妙枚举子集)

题目链接:2017盛大游戏杯 零件组装 题意: 有n个零件,给你相邻关系和排斥关系,每两块零件组装起来有一个代价,问最少的代价总和是多少. 题解: 考虑状态压缩,dp[i]表示i这个集合为一个零件块. 那么要枚举一下i的子集.O(3^n). 先要预处理一下每个集合的排斥个数和相邻个数,然后容斥一下就可以了. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int

玲珑杯 #10 A dp递推

A. Black and White 题意:n个格子排在一行,每个格子里都有一枚白棋或一枚黑棋.限制:不能有连续a枚黑棋或连续b枚白棋,问有多少种方案. tags:一开始还以为是组合数学,没想到又是dp.这mmp的还是签到题 考虑长度为 i 的合法序列与长度为 i−1 的合法序列有什么关系.定dp[i][black] 为有 i 枚棋子且最后一枚是黑色的合法方案数量,g[i]为有 i 枚棋子的合法方案数量.现假设前面 i-1 枚棋都是合法的,在 i 位置加一枚黑棋,唯一不合法的情况就是最后的a枚棋

基础dp

队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加深了对dp的理解,但要想搞好dp,还需要多多练习啊. HDU - 1024 开场高能 给出一个数列,分成m段,求这m段的和的最大值,dp[i][j]表示遍历到第i个数,已经划分了j段,对于每一个数有两种决策,加入上一个区间段,自己成为一个区间段,故dp[i][j] = max(dp[i-1][j]+