题意:给出一个二进制数,其中有些位的数字不确定,对于所有对应的格雷码,与一个序列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;
}

  

最新文章

  1. day 2 Linux基础
  2. springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
  3. Encrypt
  4. eclipse working sets 视图 解决Other Projects不见问题
  5. 在线程中用 OracleBulkCopy 导至 CPU 百分百
  6. 通过NuGet获取sqlite对应的.net的dll
  7. Unity5 新功能解析--物理渲染与standard shader
  8. 【JSP】JSP向MySQL写入|读出中文数据——乱码问题
  9. linux端口与进程命令
  10. DOM初涉
  11. 系统性能优化分析—CPU消耗
  12. Android TextView属性
  13. Tomcat的常用内置对象
  14. MemSQL Start[c]UP 2.0 - Round 1E. Three strings
  15. hive reduce 阶段GC Exception
  16. Java获取工程目录
  17. Dell服务器Raid5之后安装系统
  18. Office 2016 永久激活
  19. python测试开发django-27.表单提交之post修改密码
  20. vim学习笔记(12):在vim中修改文件编码,解决vim 打开乱码

热门文章

  1. 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection &amp; Dictionary的支持
  2. 【设计模式六大原则4】接口隔离原则(Interface Segregation Principle)
  3. lintcode :链表插入排序
  4. NewPascal(也许只是对FreePascal的一种封装)
  5. 是什么让 Ubuntu 选用 Qt 而不是 GTK?
  6. 在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义
  7. linux用VSFTP搭建FTP服务器
  8. Hibernate--基本映射标签和属性介绍
  9. Oracle 多实例如何通过EM进行访问-portlist.ini
  10. [HDOJ4612]Warm up(双连通分量,缩点,树直径)