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 ...
随机推荐
- AutoIt简单使用
以上是自己在公司做培训的PPT首页,其实在线的中文参考文档很全面,很值得学习的.
- ios摇一摇功能
在 UIResponder中存在这么一套方法 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event __OSX_A ...
- Go:方法
一.基本介绍 在某些情况下,我们需要定义方法.比如 Person 结构体,除了有一些字段外(姓名.年龄...),还可以有一些行为动作(吃.唱歌...),这就需要用方法才能实现. Go中的方法是作用在指 ...
- 新进Linux菜鸟,请多多关照
早早知晓Linux的大名,一直未研究学习,近来看了kernel一些源代码,在网上搜过很多基础的知识.感觉这个Linux的世界很广大,值得好好深入学习.初生婴儿,呱呱落地,必先躺若干日后能坐,在学爬,进 ...
- selenium3 简单使用
from selenium import webdriverimport time browser = webdriver.Chrome()url = 'https://baidu.com' brow ...
- 集训第五周 动态规划 B题LIS
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- poj2325 大数除法+贪心
将输入的大数除以9 无法整除再除以 8,7,6,..2,如果可以整除就将除数记录,将商作为除数继续除9,8,...,3,2. 最后如果商为1 证明可以除尽 将被除过的数从小到大输出即可 #includ ...
- Webbrowser 在web项目中的使用
string htmlstr = string.Empty; [STAThread] public string GetHtmlByWeb(string url) { try { RunWithSin ...
- Swift - 修改导航栏“返回”按钮文字,图标
Swift - 修改导航栏“返回”按钮文字,图标 2015-11-27 09:13发布:hangge浏览:4037 项目中常常会使用 UINavigationController 对各个页面进行导 ...
- 2014-4-5安装python以及基础知识
1.下载安装 从python官网下载python2.7.6 https://www.python.org/download/releases/2.7.6 建议用迅雷下载 会比较快 2.交互式解释器 运 ...