题意:给出一个二进制数,其中有些位的数字不确定,对于所有对应的格雷码,与一个序列a对应,第i位数字为1时得分a[i],求最大的得分。

解法:一个二进制数x对应的格雷码为x ^ (x >> 1),题解说是个dp……但其实就四种情况……判一下就好了

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
string s;
LL a[200005];
int main()
{
int T, cse;
while(~scanf("%d", &T))
{
cse = 1;
while(T--)
{
cin >> s;
int n = s.size();
string s1 = '0' + s;
s1.erase(s1.end() - 1);
for(int i = 0; i < n; i++)
scanf("%lld", &a[i]);
char st = '0';
LL ans = 0;
for(int i = 0; i < n; i++)
{
if(s[i] != '?')
{
if(s[i] != s1[i])
ans += a[i];
st = s[i];
}
else
{
int cnt = 0;
LL sum = 0, minn = a[i];
while(i < n && s[i] == '?')
{
cnt++;
sum += a[i];
minn = min(minn, a[i]);
i++;
}
char ed;
if(i < n)
{
ed = s[i];
sum += a[i];
minn = min(minn, a[i]);
}
else
{
ans += sum;
break;
}
if(st == ed)
{
if(cnt & 1)
ans += sum;
else
ans += sum - minn;
}
else
{
if(cnt & 1)
ans += sum - minn;
else
ans += sum;
}
st = s[i];
}
}
printf("Case #%d: %lld\n", cse++, ans);
}
}
return 0;
}

  

HDU 5375 Gray code的更多相关文章

  1. HDU 5375 Gray code (简单dp)

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

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

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

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

  4. HDU 5375 Gray code(2015年多校联合 动态规划)

    题目连接 : 传送门 题意: 给定一个长度为的二进制串和一个长度为n的序列a[],我们能够依据这个二进制串得到它的Gray code. Gray code中假设第i项为1的话那么我们就能够得到a[i] ...

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

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

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

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

  7. hdu 5375 Gray code 【 dp 】

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

  8. HDU 5375 Gray Code 动归

    题意:给你一串不确定的二进制码,其对应的格雷码的每一位有对应的权值,问转换成的格雷码的能取到的最大权值是多少. 思路:没有思路,乱搞也AC #pragma comment(linker, " ...

  9. HDU 5375 Gray code(DP)

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

随机推荐

  1. 看来要学 Asp.Net 了

    C#大部分招聘都要这个:对个人用而言,太庞大了,所以对其的感观一直不咋,也就没想学了.

  2. wireshark: there are no interfaces on which a capture can be done

    权限问题,简单的直接sudo就行. 更安全的做法是: # chmod 4755 /usr/bin/dumpcap dumpcap的所在目录可用whereis命令查看.

  3. java打印时间精确到毫秒

    package net.floodlightcontroller.conflict; import java.io.*; import java.util.*; import java.text.Si ...

  4. mac 安装mysql 报错“ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)” 解决办法

    首先安装 homebrew 再 brew install mysql 之后连接 mysql 无论是登录还是修改初始密码都会报如下的错误 ERROR 2002 (HY000): Can not conn ...

  5. 用DateTime.ToString(string format)输出不同格式的日期

    http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参 ...

  6. java io异步

    1.一般来说,可以通过多线程的方式来实现异步 2.同步和异步着重点在于多个任务的执行过程中,一个任务的执行是否会导致整个流程的暂时等待: 3.而阻塞和非阻塞着重点在于发出一个请求操作时,如果进行操作的 ...

  7. 我30天在Stack Overflow问答网站上回答问题的感受

    想法的萌芽 如果非要总结下我多年来是如何使用Stack Overflow的话,我的答案就是:打开网页,搜索问题,查看Stack Overflow的搜索结果,参考答案,最后再关掉网页. 我的生活已经离不 ...

  8. Hibernate逍遥游记-第4章映射对象标识符-increment、identity、hilo、native、assigned、sequence、<meta>

    1. package mypack; import java.lang.reflect.Constructor; import org.hibernate.*; import org.hibernat ...

  9. *EditPlus注册码在线生成

    http://www.jb51.net/tools/editplus/

  10. opencv 图像阴影检测

    参数说明: IplImage *workImg-当前全局变量,表示正在显示的图片. downleft, upright- 检测出的阴影部分矩形框的两个对角顶点. /****************** ...