2015 多校联赛 ——HDU5375(dp)
00?0
1 2 4 8
????
1 2 4 8
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)的更多相关文章
- 2015 多校联赛 ——HDU5410(dp)
Sample Input 1 100 2 10 2 1 20 1 1 Sample Output 21 题意:共有m元钱和n种东西,求每种单价p,而且你买x个该种物品可以得到Ax+B个,求m元钱最 ...
- 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 ...
- 2015多校.Zero Escape (dp减枝 && 滚动数组)
Zero Escape Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 2015 多校联赛 ——HDU5294(最短路,最小切割)
Tricks Device Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...
- 2015 多校联赛 ——HDU5316(线段树)
Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...
- 2015 多校联赛 ——HDU5323(搜索)
Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
随机推荐
- 冲刺每日报告--Day1
敏捷冲刺每日报告--Day1 情况简介 由于李世钰同学出差了,周六才能回来.所以我们只能先写爬虫,封装代码提供接口等他回来调用. 任务进度 赵坤:编写了基本爬虫代码,目前能在国内有版权的B站.爱奇艺中 ...
- vue2 前端搜索实现
项目数据少的时候,搜索这样的小事情就要交给咱们前端来做了,重要声明,适用于小项目!!!!! 其实原理很简单,小demo是做搜索市区名称或者按照排名搜索. <div> <input t ...
- Python 双向链表
操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, it ...
- scrapy crawl rules设置
rules = [ Rule(SgmlLinkExtractor(allow=('/u012150179/article/details'), restrict_xpaths=('//li[@clas ...
- bzoj千题计划274:bzoj3779: 重组病毒
http://www.lydsy.com/JudgeOnline/problem.php?id=3779 有一棵树,初始每个节点有不同的颜色 操作1:根节点到x的路径上的点 染上一种没有出现过的颜色 ...
- css3动画transition详解2
transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition ...
- PHP分页初探 一个最简单的PHP分页代码的简单实现
PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...
- ubuntu启动报/root/.profile mesg:ttyname failed错误的解决办法
修改/root/.profile文件,如下命令 sudo gedit /root/profile 将文中的最后一行mesg n修改成tty -s && mesg n
- python 字符串和字典
一.字符串操作 name = "my name is \t {name} and i am {year} years old" 1.首字母大写 print(name.capital ...
- HTTP请求到爬虫代码的终南捷径
前阵子在做爬虫的时候学会了各种抓包,看到http请求的时候硬拼代码实在有点累. 后来发现Postman工具是直接可以把Postman请求直接生成对应的代码,这样一下来就美滋滋了. 那么最后的问题就成了 ...