HDU 5375 Gray code(2015年多校联合 动态规划)
题目连接 : 传送门
题意:
给定一个长度为的二进制串和一个长度为n的序列a[],我们能够依据这个二进制串得到它的Gray code。
Gray code中假设第i项为1的话那么我们就能够得到a[i]的值,在原来的二进制串中有一些位置为?
表示能够为0,
也能够为1求最后所能得到的最大的值。
已知二进制码怎样得到Gray code请看:传送门
分析:
我们能够通过动态规划来解决问题,状态转移也很好找 ,dp[i][j]表示到第i个位置。第i个位置
取j所能得到的最大值。非常明显这个题的j仅仅能有两种取值0,1.
详细的状态转移看代码。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = 2e5+10; typedef long long LL; char str[maxn]; LL dp[maxn][2]; int a[maxn]; int main()
{
int n,t,cas=1;
scanf("%d",&t);
while(t--){
scanf("%s",str);
n=strlen(str);
for(int i=0;i<n;i++) scanf("%d",a+i);
memset(dp,0,sizeof(dp));
if(str[0]=='1'||str[0]=='? ') dp[0][1]= a[0];
for(int i=1;i<n;i++){
if(str[i]=='? '){
if(str[i-1]=='0')dp[i][1] = dp[i-1][0]+a[i],dp[i][0]=dp[i-1][0];
if(str[i-1]=='1') dp[i][0] = dp[i-1][1]+a[i],dp[i][1]=dp[i-1][1];
if(str[i-1]=='?'){
dp[i][0] = max(dp[i-1][0],dp[i-1][1]+a[i]);
dp[i][1] = max(dp[i-1][1],dp[i-1][0]+a[i]);
}
}
else{
if(str[i]=='1'&&str[i-1]=='?') dp[i][1] = max(dp[i-1][0]+a[i],dp[i-1][1]);
if(str[i]=='1'&&str[i-1]=='1') dp[i][1] =dp[i-1][1];
if(str[i]=='1'&&str[i-1]=='0') dp[i][1] =dp[i-1][0]+a[i];
if(str[i]=='0'&&str[i-1]=='1') dp[i][0] = dp[i-1][1]+a[i];
if(str[i]=='0'&&str[i-1]=='?') dp[i][0] = max(dp[i-1][1]+a[i],dp[i-1][0]);
if(str[i]=='0'&&str[i-1]=='0') dp[i][0] =dp[i-1][0];
}
}
printf("Case #%d: ",cas++);
if(str[n-1]=='?') printf("%I64d\n",max(dp[n-1][0],dp[n-1][1]));
if(str[n-1]=='0') printf("%I64d\n",dp[n-1][0]);
if(str[n-1]=='1') printf("%I64d\n",dp[n-1][1]);
}
return 0;
}
HDU 5375 Gray code(2015年多校联合 动态规划)的更多相关文章
- 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 ...
- HDU 5375 Gray code (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 5375——Gray code——————【dp||讨论】
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- hdu 5375 - Gray code(dp) 解题报告
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5375 Gray code 格雷码(水题)
题意:给一个二进制数(包含3种符号:'0' '1' '?' ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...
- HDU 5375 Gray code
题意:给出一个二进制数,其中有些位的数字不确定,对于所有对应的格雷码,与一个序列a对应,第i位数字为1时得分a[i],求最大的得分. 解法:一个二进制数x对应的格雷码为x ^ (x >> ...
- hdu 5375 Gray code 【 dp 】
dp[i][j]表示第i位取j的时候取得的最大的分数 然后分s[i]是不是问号,s[i-1]是不是问号这大的四种情况讨论 #include<cstdio> #include<cstr ...
- HDU 5375 Gray Code 动归
题意:给你一串不确定的二进制码,其对应的格雷码的每一位有对应的权值,问转换成的格雷码的能取到的最大权值是多少. 思路:没有思路,乱搞也AC #pragma comment(linker, " ...
- HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...
随机推荐
- 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查
(1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...
- 为data盘加入磁盘(asm external)
1.创建盘,并两个节点皆能够訪问. 2.检查集群状态 [grid@rac1 ~]$ crsctl status res -t ------------------------------------- ...
- 在Kali上安装打印机
在Kali 2.0上安装打印机 最近在玩儿渗透测试,就把自己的办公电脑做成了Kali,可是发现办公室的网络打印机没办法正常使用,上网查了一下,把整个过程简单的记录一下,省的忘记了 1.安装cups a ...
- c语言实现皇帝翻牌游戏
一个综合的游戏,对所学的知识进行整合!融会贯通! #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- HTML iframe 和 frameset 的区别
转自:http://www.cnblogs.com/polk6/archive/2013/05/24/3097430.html HTML iframe 和 frameset 的区别 iframe 和 ...
- 25.QT进度条
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <QProgressBar&g ...
- js 转化为几天前,几小时前,几分钟前...
转换标准时间为时间戳: function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/" ...
- Safari new Date() 兼容问题
我的时间 var myTime = "2015-12-31 12:10:21"; 正常写法 var newTime = new Date(myTime); safari兼容写法 ...
- javascript中client()兼容性封装
function client() { var clientWidth = window.innerWidth || document.documentElement.clientWidth || d ...
- ng-repeat 中的 track by $index
用ng-repeat指令遍历一个javascript数组,当数组中有重复元素的时候,angularjs会报错,这是因为ng-Repeat不允许collection中存在两个相同Id的对象. 对于数字或 ...