HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时。加上该位权值,求最大权值和为多少。
分析:比赛的时候愚了。竟然以为格雷码是由3个二进制字符转换的,于是妥妥wa了,事实上格雷码的求法是通过异或求的的,即Gi=Bi⊕Bi-1(G为格雷码,B为二进制数),那么仅仅要水水的DP一下就好了。详细DP是通过保存
DP[i][j],当中i为当前位。j表示当前为为0还是1,递推式为:
一、s[i]为0时
1.s[i-1]为0,dp[i][0]=dp[i-1][0];
2.s[i-1]为1,dp[i][0]=dp[i-1][1]+v[i];
3.s[i-1]为?,dp[i][0]=max(dp[i-1][0],dp[i-1][1]+v[i]);
二、s[i]为1时
1.s[i-1]为0,dp[i][1]=dp[i-1][0]+v[i];
2.s[i-1]为1。dp[i][1]=dp[i-1][1];
3.s[i-1]为?,dp[i][1]=max(dp[i-1][0]+v[i],dp[i-1][1]);
三、s[i]为?时,就是结合上面两种情况
1.s[i-1]为0,dp[i][0]=dp[i-1][0],dp[i][1]=dp[i-1][0]+v[i];
2.s[i-1]为1,dp[i][0]=dp[i-1][1]+v[i],dp[i][1]=dp[i-1][1];
3.s[i-1]为?,dp[i][0]=max(dp[i-1][0],dp[i-1][1]+v[i]),dp[i][1]=max(dp[i-1][0]+v[i],dp[i-1][1]);
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include<vector>
#pragma comment(linker,"/STACK:1024000000,1024000000")
using namespace std;
const int maxn = 2e5+5;
char s[maxn];
int v[maxn];
int dp[maxn][3];
int main()
{
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++){
memset(dp,0,sizeof(dp));
scanf("%s",s+1);
int n=strlen(s+1);
s[0]='0';
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
}
for(int i=1;i<=n;i++)
{
if(s[i]=='1') {
if(s[i-1]=='?')
dp[i][1]=max(dp[i-1][0]+v[i],dp[i-1][1]);
else if(s[i-1]=='0') dp[i][1]=dp[i-1][0]+v[i];
else dp[i][1]=dp[i-1][1];
}
if(s[i]=='0') {
if(s[i-1]=='?')
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+v[i]);
else if(s[i-1]=='0') dp[i][0]=dp[i-1][0];
else dp[i][0]=dp[i-1][1]+v[i];
}
if(s[i]=='? '){
if(s[i-1]=='?'){
dp[i][1]=max(dp[i-1][0]+v[i],dp[i-1][1]);
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+v[i]);
}
else if(s[i-1]=='0'){
dp[i][1]=dp[i-1][0]+v[i];
dp[i][0]=dp[i-1][0];
}
else{
dp[i][1]=dp[i-1][1];
dp[i][0]=dp[i-1][1]+v[i];
}
}
}
printf("Case #%d: %d\n",cas,max(dp[n][0],dp[n][1]));
}
}
HDU 5375 Gray code(DP)的更多相关文章
- hdu 5375 - Gray code(dp) 解题报告
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5375 Gray code (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 5375——Gray code——————【dp||讨论】
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- hdu5375 Gray code(DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题目大意:给你一个二进制串,带'?'的位置能够由你来决定填'1'还是'0',补充完整之后转换成 ...
- hdu 5375 Gray code 【 dp 】
dp[i][j]表示第i位取j的时候取得的最大的分数 然后分s[i]是不是问号,s[i-1]是不是问号这大的四种情况讨论 #include<cstdio> #include<cstr ...
- HDU 5375 Gray code 格雷码(水题)
题意:给一个二进制数(包含3种符号:'0' '1' '?' ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...
- 2015 Multi-University Training Contest 7 hdu 5375 Gray code
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
随机推荐
- Edge浏览器开发人员工具
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch ...
- 鼠标滑过,解决ul下 li下a的背景与父级Li不同宽的问题
我们在写导航或者页面有超链接的地方,有一些是需要超链接的背景和Li的宽度一样的.但是,却没有达到这种效果?为什么? 我们做的效果图:如下 期望的效果:如下 出现这样的原因:由于a是个行内元素,它没有宽 ...
- Android 自定义的开关按钮——SwitchButton
本文转自:http://blog.csdn.net/swust_chenpeng/article/details/19967501 我将原文的控件进行了一些修改,去掉了原来控件的外边框,只留下重要的遮 ...
- 集合HashSet的使用
集合中的HashSet底层是通过Hash表实现,HashSet的特点是元素唯一,但用到Hash表就跟hashCode()有了密不可分的联系,所以HashSet的唯一性是通过hashCode()方法来保 ...
- vue组件父子之间相互通信案例
- react 中间件相关的一些源码解析
零.随便说说中间件 在react的使用中,我们可以将数据放到redux,甚至将一些数据相关的业务逻辑放到redux,这样可以简化我们组件,也更方便组件抽离.封装.复用,只是redux不能很好的处理异步 ...
- 【Fiddler】使用fiddler抓取指定浏览器的包
参考资料:http://blog.csdn.net/sufubo/article/details/49331705 使用fiddler抓取不到浏览器的包时常用的解决办法: 1.必须先打开Fiddler ...
- HBase快照、Snapshots 淘宝快照
淘宝在2011年之前所有的后端持久化存储基本上与我们所认知的意义, 大量存于 mysql .少量 oracle mongdb 等,使用mysql 的原因相信各位也很熟悉了. 开源.社区庞大.解决方 ...
- 有关于OpenGL、OpenGL ES、WebGL的小结
转自原文 有关于OpenGL.OpenGL ES.WebGL的小结 一. OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口 ...
- 为OLED屏添加GUI支持3:字库
为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...