hdu5375 Gray code(DP)
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5375
题目大意:给你一个二进制串,带’?’的位置能够由你来决定填’1’还是’0’,补充完整之后转换成格雷码表示,每个位置都有一个权值a[i],仅仅有格雷码为’1’的位能够加上权值,问你终于权值之和最大为多少。
格雷码表示能够百度一下,在这里能够通俗一点讲:对于这么一个串,假设i位置是1,那么他后面的数就会变化(0变1、1变0),注意仅仅是看初始串。
比如:初始串为110,那么改变以后则为101,而不是100。
思路:考虑用dp解决,dp[i][j]表示对于第i个位置取j时的最大分数(j取0或者1)。
那么就有dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);
dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]);
当j为?时,表明j可能为0或者1。那么久两者都考虑处理一遍。
注意初始化。
#include<stdio.h>
#include<math.h>
#include<string.h>
#define max(a,b) a>b? a:b
int dp[200005][2],a[200005];
int main()
{
int T,i,j,l,k,t=0;
char s[200005],c[200005];
scanf("%d",&T);
while(T--)
{
t++;
scanf("%s",s);
l=strlen(s);
for(i=0;i<l;i++)
c[i+1]=s[i];
for(i=1;i<=l;i++)
scanf("%d",&a[i]);
for(i=0;i<200005;i++)
{
dp[i][0]=-999999;
dp[i][1]=-999999;
}
if(c[1]=='0')dp[1][0]=0;
if(c[1]=='1')dp[1][1]=a[1];
if(c[1]=='?'){
dp[1][0]=0;
dp[1][1]=a[1];
}
for(i=2;i<=l;i++)
{
if(c[i]=='0'){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);
}
if(c[i]=='1'){
dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]);
}
if(c[i]=='? '){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);
dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]);
}
}
printf("Case #%d: ",t);
if(c[l]=='0')printf("%d\n",dp[l][0]);
else if(c[l]=='1')printf("%d\n",dp[l][1]);
else printf("%d\n",max(dp[l][0],dp[l][1]));
}
return 0;
}
hdu5375 Gray code(DP)的更多相关文章
- HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...
- hdu 5375 - Gray code(dp) 解题报告
Gray code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- ZOJ 2745 01-K Code(DP)(转)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745 题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’, ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- visual studio code(vscode) 调试php(转)
原文链接:http://www.cnblogs.com/CLR010/p/5276077.html visual studio code(vscode) 调试php 1.下载vscode (vis ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- Visual Studio Code(VSCODE)语言设置
Visual Studio Code(VSCODE)语言设置 语言设置 1.快捷键 Windows.Linux 快捷键是:ctrl+shift+p macOS 快捷键是:command + shift ...
随机推荐
- VC:UI编程
VC++中给对话框设置背景图片的方法 -----------------------------------------------------方法一(铺满窗口)------------------- ...
- 第2节 hive基本操作:11、hive当中的分桶表以及修改表删除表数据加载数据导出等
分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启hive的桶表功能 set hive.enforce.bucketing= ...
- 第3节 mapreduce高级:2、3、课程大纲&共同好友求取步骤一、二
第五天课程大纲:1.社交粉丝的数据分析:求共同好友2.倒排索引的建立3.自定义inputFormat合并小文件 4.自定义outputformat5.分组求topN6.MapReduce的其他补充 了 ...
- ffmpeg处理网络流
最近遇到好几个人在问ffmpeg如何处理网络流,刚好前段时间也在做这方面,抽空整理了下,把主要代码发出来,希望对大家有用.为简单处理,我这里只简单介绍UDP接收TS流,其实只要是socket接收的都可 ...
- js+flash(as3)实现复制文字内容到剪切板实例
/* SWFObject v2.2 swfobject.js */ var swfobject=function(){var D="undefined",r="objec ...
- 网络协议TCP
TCP:传输控制协议 tcp的特点:面向连接(打电话模型),可靠传输 tcp通信的三个步骤: 1.通信双方建立连接 2.收发收据 3.关闭连接 tcp客户端实现流程 """ ...
- MongoDB数据库的安装
首先就是MongoDB的下载,可以去MongoDB官网进行下载,https://www.mongodb.com/download-center/community,也可以通过百度网盘直接下载, 链接: ...
- Vue如何实现swiper左右滑动内容区控制导航tab同时切换高亮
Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区. ...
- Vue如何点亮多个tab选项简易方法
我们平常遇到点击选择会遇到单选或多选,当你设计图是自定义的时候,第一反应就是引入UI插件吧.可是如果项目只用到插件的这一点点功能,我们引入了一个插件这就不太友好了.此时我们自己写这个小功能是很简单的, ...
- android 的Manifest对图标的影响
转自 http://blog.csdn.net/yuan1590/article/details/6700683 先看看网路上的说法: Android.intent.action.MAIN决定应用程序 ...