Sample Input
2
00?0
1 2 4 8
????
1 2 4 8
 
Sample Output
Case #1: 12
Case #2: 15

?部分可以是0  or  1,将二进制转化成格雷码后,哪里是 1 就可以取相应的数,求得到数的最大值

①:判断连续的?的个数奇偶不同,两边是否相等。在有时会去掉一个最小值。(感觉写着很麻烦)

#include <iostream>
#include <cstdio>
#include <vector>
#include<cstring>
using namespace std;
char s[200010];
int a[200010];
int main()
{
int k=1;
int case0;
scanf("%d",&case0);
while(case0--)
{
scanf("%s",s);
int leng=strlen(s);
int i,j;
for(i=0; i<leng; i++)
scanf("%d",&a[i]);
long long int ssum,sum;
ssum=0; for(i=0;i<leng; i++)
{
if(s[i]=='?')
{
sum=0;
int min1=0x3f3f3f3f;
for(j=i; s[j]=='?'; j++)
{
sum+=a[j];
if(min1>a[j])
min1=a[j];
}
if(s[j]!='\0')
{
sum+=a[j];
if(min1>a[j])
min1=a[j];
}
if(i==0&&((s[j]=='1'&&(j-i)%2==1)||(s[j]=='0'&&(j-i)%2==0)))
sum-=min1;
if(i!=0&&s[j]!='\0')
{
if(s[i-1]==s[j]&&(j-i)%2==0)
sum-=min1;
if(s[i-1]!=s[j]&&(j-i)%2==1)
sum-=min1;
}
ssum+=sum;
i=j; }
else if(i==0&&s[i]=='1')
ssum+=a[i];
else if(s[i]!=s[i-1]&&i!=0)
ssum+=a[i];
}
printf("Case #%d: ",k++);
cout<<ssum<<endl;
}
return 0;
}

  

②dp

dp[i][0]表示第i个位置上取0.

dp[i][0] = max(dp[i-1][0],dp[i-1][1]+a[i]);

既然能够得到 i 与 i - 1 的关系,自然推出。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 100010
using namespace std;
const int INF = 0x3f3f3f3f;
char s[200050];
int a[200050];
int dp[200050][2];
int main()
{
int T;
int cas = 1;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
int len = strlen(s);
for(int i = 0; i < len; i++)
scanf("%d",&a[i]);
dp[0][0] = dp[0][1] = -INF; if(s[0] == '0' || s[0] == '?')
dp[0][0] = 0;
if(s[0] == '1' || s[0] == '?')
dp[0][1] = a[0]; for(int i = 1;i < len;i++)
{
dp[i][0] = dp[i][1] = -INF;
if(s[i] == '0' || s[i] == '?')
dp[i][0] = max(dp[i-1][0],dp[i-1][1]+a[i]);
if(s[i] == '1' || s[i] == '?')
dp[i][1] = max(dp[i-1][0]+a[i],dp[i-1][1]);
} printf("Case #%d: %d\n",cas++,max(dp[len-1][0],dp[len-1][1]));
}
return 0;
}

  

2015 多校联赛 ——HDU5375(dp)的更多相关文章

  1. 2015 多校联赛 ——HDU5410(dp)

    Sample Input 1 100 2 10 2 1 20 1 1   Sample Output 21 题意:共有m元钱和n种东西,求每种单价p,而且你买x个该种物品可以得到Ax+B个,求m元钱最 ...

  2. 2015 多校联赛 ——HDU5389(dp)

    Sample Input 4 3 9 1 1 2 6 3 9 1 2 3 3 5 2 3 1 1 1 1 1 9 9 9 1 2 3 4 5 6 7 8 9   Sample Output 1 0 1 ...

  3. 2015多校.Zero Escape (dp减枝 && 滚动数组)

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  4. 2015 多校联赛 ——HDU5334(构造)

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  5. 2015 多校联赛 ——HDU5302(构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. 2015 多校联赛 ——HDU5294(最短路,最小切割)

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  7. 2015 多校联赛 ——HDU5325(DFS)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  8. 2015 多校联赛 ——HDU5316(线段树)

    Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...

  9. 2015 多校联赛 ——HDU5323(搜索)

    Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

随机推荐

  1. 冲刺每日报告--Day1

    敏捷冲刺每日报告--Day1 情况简介 由于李世钰同学出差了,周六才能回来.所以我们只能先写爬虫,封装代码提供接口等他回来调用. 任务进度 赵坤:编写了基本爬虫代码,目前能在国内有版权的B站.爱奇艺中 ...

  2. vue2 前端搜索实现

    项目数据少的时候,搜索这样的小事情就要交给咱们前端来做了,重要声明,适用于小项目!!!!! 其实原理很简单,小demo是做搜索市区名称或者按照排名搜索. <div> <input t ...

  3. Python 双向链表

    操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, it ...

  4. scrapy crawl rules设置

    rules = [ Rule(SgmlLinkExtractor(allow=('/u012150179/article/details'), restrict_xpaths=('//li[@clas ...

  5. bzoj千题计划274:bzoj3779: 重组病毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3779 有一棵树,初始每个节点有不同的颜色 操作1:根节点到x的路径上的点 染上一种没有出现过的颜色 ...

  6. css3动画transition详解2

    transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition ...

  7. PHP分页初探 一个最简单的PHP分页代码的简单实现

    PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...

  8. ubuntu启动报/root/.profile mesg:ttyname failed错误的解决办法

    修改/root/.profile文件,如下命令 sudo gedit /root/profile 将文中的最后一行mesg n修改成tty -s && mesg n

  9. python 字符串和字典

    一.字符串操作 name = "my name is \t {name} and i am {year} years old" 1.首字母大写 print(name.capital ...

  10. HTTP请求到爬虫代码的终南捷径

    前阵子在做爬虫的时候学会了各种抓包,看到http请求的时候硬拼代码实在有点累. 后来发现Postman工具是直接可以把Postman请求直接生成对应的代码,这样一下来就美滋滋了. 那么最后的问题就成了 ...