题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时。加上该位权值,求最大权值和为多少。



分析:比赛的时候愚了。竟然以为格雷码是由3个二进制字符转换的,于是妥妥wa了,事实上格雷码的求法是通过异或求的的,即Gi=BiBi-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)的更多相关文章

  1. hdu 5375 - Gray code(dp) 解题报告

    Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  2. HDU 5375 Gray code (简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Oth ...

  3. HDU 5375——Gray code——————【dp||讨论】

    Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. hdu5375 Gray code(DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题目大意:给你一个二进制串,带'?'的位置能够由你来决定填'1'还是'0',补充完整之后转换成 ...

  5. hdu 5375 Gray code 【 dp 】

    dp[i][j]表示第i位取j的时候取得的最大的分数 然后分s[i]是不是问号,s[i-1]是不是问号这大的四种情况讨论 #include<cstdio> #include<cstr ...

  6. HDU 5375 Gray code 格雷码(水题)

    题意:给一个二进制数(包含3种符号:'0'  '1'  '?'  ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...

  7. HDU 5791:Two(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description   Alice gets two sequences A ...

  8. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...

  9. 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 ...

随机推荐

  1. 7. 关于IntelliJ IDEA删除项目

    转自:https://www.cnblogs.com/zhangqian27/p/7698148.html 刚开始使用IDEA . 自己创建项目玩,结果发现IDEA无法删除,我也是醉了,Eclipse ...

  2. List methods

    Python provides methods that operate on lists. For example, append adds a new element to the end of ...

  3. 9-第一个app项目

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. directshow 获取本地摄像头播放

    最近因为项目的需要,做了一个基本的获取本地笔记本摄像头并且播放的例子,因为网上的关于这部分的完整例子基本都没有,那我就上传一个吧,希望能够帮到需要学习视频的朋友. 另外也是为了纪念雷霄骅博士为音视频方 ...

  5. 线程1—Thread

    随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...

  6. IE9+ BUG汇总

    CSS透明没有继承 css opacity is not inherited in internet explorer 今儿遇到一个问题源于同事写的一个页面,发现父级明明 opacity:0 了,但子 ...

  7. Android——PullToRefresh自动刷新

    需求:强制刷新 方法一: PullToRefreshListView本身提供了一个setRefreshing()接口,调用该接口会自动触发下拉刷新的操作(前提是支持下拉刷新).按照一般的操作我们直接在 ...

  8. 前端图像 裁剪利器 JQuerJjcrop+裁剪图像保存教程

    由于一个项目中需要用到用户头像上传裁剪组件,这两天便网上找了一些相关插件,主要由以下几种插件: 1.Image Cropper:http://elemefe.github.io/image-cropp ...

  9. 6、json支持

    package main import ( "encoding/json" "fmt") // Json 支持 type Response1 struct{ P ...

  10. Kubernetes本地私有仓库配置

    实验环境 master 10.6.191.181 node1 10.6.191.182 node2 10.6.191.183 本地私有仓库 10.6.191.184 一.安装本地私有仓库 1.安装do ...