递推DP HDOJ 5375 Gray code
2015-08-12 10:39
369 查看
题目传送门
/* 题意:给一个串,只能是0,1,?(0/1)。计算格雷码方法:当前值与前一个值异或,若为1,可以累加a[i],问最大累加值 DP:dp[i][0/1]表示当前第i位选择0/1时的最大分数,那么分类讨论,情况太多,看代码,注意不可能的状态不要转移 */ /************************************************ * Author :Running_Time * Created Time :2015-8-11 15:49:03 * File Name :G.cpp ************************************************/ #include <cstdio> #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <list> #include <map> #include <set> #include <bitset> #include <cstdlib> #include <ctime> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 typedef long long ll; const int MAXN = 2e5 + 10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; char s[MAXN]; int a[MAXN]; int dp[MAXN][2]; int work(int n) { memset (dp, 0, sizeof (dp)); if (s[1] == '?') dp[1][1] = a[1]; else { int t = s[1] - '0'; if (t == 1) dp[1][1] = a[1]; } for (int i=2; i<=n; ++i) { if (s[i] == '?') { if (s[i-1] == '?') { dp[i][0] = max (dp[i-1][0], dp[i-1][1] + a[i]); dp[i][1] = max (dp[i-1][1], dp[i-1][0] + a[i]); } else { int t = s[i-1] - '0'; dp[i][1-t] = max (dp[i-1][1-t], dp[i-1][t] + a[i]); dp[i][t] = dp[i-1][t]; } } else { if (s[i-1] == '?') { int t = s[i] - '0'; dp[i][t] = max (dp[i-1][t], dp[i-1][1-t] + a[i]); } else { int tt = s[i-1] - '0', t = s[i] - '0'; dp[i][t] = dp[i-1][tt] + ((tt != t) ? a[i] : 0); } } } if (s == '?') { return max (dp [0], dp [1]); } else return dp [s -'0']; } int main(void) { //HDOJ 5375 Gray code int T, cas = 0; scanf ("%d", &T); while (T--) { scanf ("%s", s + 1); int len = strlen (s + 1); for (int i=1; i<=len; ++i) scanf ("%d", &a[i]); printf ("Case #%d: %d\n", ++cas, work (len)); } return 0; }
相关文章推荐
- 同余模定理 HDOJ 5373 The shortest problem
- 深入剖析百度dsp系统底层以及框架
- hdu5361(2015多校6)--In Touch(变形的dijkstra)
- 2015 多校联赛 ——HDU5375(dp)
- 黑马程序员--java技术blog---第四篇:IO流(3)
- 《Java实战开发经典》第四章4.8
- leetCode #27 Remove Element
- os模块
- wsdl 生成客户端
- Snowflake Snow Snowflakes(POJ--3349
- 2015 多校联赛 ——HDU5375(dp)
- hdu5373(整除11)
- vector向量容器
- 改天记得把自己那个代码中的改成这个boost::lexical_cast
- 模仿网易新闻客户端的滚动菜单
- 集训第五周 动态规划 最大子段和
- Git 使用规范流程
- Linux内存管理机制中buffer和cache的区别
- console.log()注意事项。
- LNMP--配置静态文件缓存