题意:

给出一个二进制数字,由0、1和?组成,最长有200000位,我们要把该二进制数字转化成格雷码,?的位置我们可以随便填1或者0,我们设该二进制的位数是n,题中给出n个数字,代表如果格雷码的第i位是1,我们就可以吧a[i]拿走,问我们能拿走的最大值。

思路:

首先我们要知道二进制是如何转化成格雷码的:

然后我们可以进行dp了。

我们设状态为dp[i][j]=k 表示前i位都填完且第i位填j我们能得到的最大值,那么转移方程如下:

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

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

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<string>
#include<cstdlib>
#include<cmath>using namespace std;const int maxn=200005;
const int inf=-1000000000;string two;
int a[maxn+5];
int dp[maxn+5][3];int main()
{int t;int cas=1;scanf("%d",&t);while(t--){cin>>two;int len=two.size();for(int i=1;i<=len;i++)scanf("%d",&a[i]);dp[0][0]=0;dp[0][1]=inf;for(int i=1;i<=len;i++){if(two[i-1]=='1'){dp[i][1]=max(dp[i-1][1],dp[i-1][0]+a[i]);dp[i][0]=inf;}else if(two[i-1]=='0'){dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);dp[i][1]=inf;}else {dp[i][1]=max(dp[i-1][1],dp[i-1][0]+a[i]);dp[i][0]=max(dp[i-1][0],dp[i-1][1]+a[i]);}}printf("Case #%d: ",cas++);printf("%d\n",max(dp[len][1],dp[len][0]));}return 0;
}

hdu5375(格雷码问题+简单DP)相关推荐

  1. 4位格雷码的顺序编码_格雷码编码 解码 实现(Python)

    作者:曹博 01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 0 ...

  2. HDU 5375 Gray code (简单dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...

  3. 格雷码编码+解码+实现(Python)

    01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 04 格雷码解 ...

  4. 二进制与格雷码之间的转换的Verilog实现(更多一点的讨论)

    目录 前言 二进制码转换为格雷码的方法 格雷码转换为二进制码的过程 更多一点讨论之generate for 更多一点讨论之for 最后对格雷码的介绍 前言 以前的博客也有写这方面的内容,只是没有显式的 ...

  5. FPGA中有限状态机的状态编码采用格雷码还是独热码?

    今天看<从算法设计到硬件逻辑的实现>这本电子书时,遇到了一个问题,就是有限状态机的编写中,状态编码是采用格雷码还是独热码呢?究竟采用哪一种编码呢? 采用独热码为什么节省许多组合电路? 等等 ...

  6. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码

    一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...

  7. LeetCode Gray Code 格雷码

    题意:提供一个数字n,代表二进制的个数,那么就有2的n次方个可能性了,从0到2^n-1.将其转成格雷码,再直接将二进制的格雷码按二进制的读法变成整数,装在vector容器中返回,要有序(否则你直接将0 ...

  8. 减治法在生成子集问题中的应用(JAVA)--递归、二进制反射格雷码

    减治法在生成组合对象问题中的应用 生成子集问题:经典的背包问题就是求解一个最优子集的问题,这里我们来讨论一个更简单的问题.对于任意一个集合来说,它都存在2^n个子集(一个集合所有的子集集合称为幂集). ...

  9. 3D 机器视觉 01 - 格雷码在3D视觉中的运用和码位选择原则

    1投影图像的编码方法: 常用的一种编码方法就是基于时间的编码方法. 该方法是将一系列投影图案在不同的时刻投射到被测物体的表面,像素的编码由物体表面反射的一系列值构成,因此这种方法被称为时间多路编码方法 ...

最新文章

  1. JavaScript中的HTTP GET请求?
  2. 建议15: 使用dynamic来简化反射实现
  3. 作者:男,博士,西南财经大学经济数学学院讲师、硕士生导师
  4. 霍金去世,巨星陨落!谨以此文缅怀霍金
  5. 二开版彩虹易支付全开源10套模板带风控实名系统源码
  6. jquery如何获取第一个或最后一个子元素?
  7. word2vec模型评估_NLP之文本分类:「Tf-Idf、Word2Vec和BERT」三种模型比较
  8. GARFIELD@01-25-2005
  9. java asm源码分析_探究CAS原理(基于JAVA8源码分析)
  10. [CTO札记]消除2种官僚文化现象
  11. params参数的调用
  12. 解决办法:Transport security has blocked a cleartext HTTP (http://) resource load since it is insecure. T
  13. UNITY自带的3D object没有三角形?
  14. 【Buzz】简介及第一个案例
  15. 二维码在企业移动中的应用
  16. U9单据打印模板自定义扩展字段显示名称
  17. 如何理解向量组的秩和矩阵的秩
  18. 关于Java垃圾回收问题的总结
  19. 微信小程序商城优势在什么地方
  20. Vue3+TypeScript实现网易云音乐WebApp(解析歌词,并实现自行匹配滚动)

热门文章

  1. TopPaper:AI 初学者经典论文列表
  2. 螺钉装弹垫平垫机器人_一种批量组装螺钉、弹垫、平垫的工装及使用方法_2
  3. python 生意参谋_GitHub - iOSDevLog/sycm: 生意参谋
  4. VTK修炼之道69:体绘制讨论_颜色传输函数
  5. 羽毛球比赛裁判常用英语术语
  6. 青年歌手大奖赛_评委会打分
  7. Python学习之共享引用
  8. Python 学习之元组
  9. OpenGL生成的法线贴图并增加光照
  10. 都2021年了,不会还有人连深度学习还不了解吧(六)-- Padding篇