hdu5375(格雷码问题+简单DP)
题意:
给出一个二进制数字,由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)相关推荐
- 4位格雷码的顺序编码_格雷码编码 解码 实现(Python)
作者:曹博 01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 0 ...
- HDU 5375 Gray code (简单dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...
- 格雷码编码+解码+实现(Python)
01 二值码 02 格雷码编码 2.1 编码优点 2.2 编码生成 2.3 递归生成 2.4 二值码转换 2.5 编码图 03 格雷码投影 3.1 投影图案生成 3.2 DLP投影图像 04 格雷码解 ...
- 二进制与格雷码之间的转换的Verilog实现(更多一点的讨论)
目录 前言 二进制码转换为格雷码的方法 格雷码转换为二进制码的过程 更多一点讨论之generate for 更多一点讨论之for 最后对格雷码的介绍 前言 以前的博客也有写这方面的内容,只是没有显式的 ...
- FPGA中有限状态机的状态编码采用格雷码还是独热码?
今天看<从算法设计到硬件逻辑的实现>这本电子书时,遇到了一个问题,就是有限状态机的编写中,状态编码是采用格雷码还是独热码呢?究竟采用哪一种编码呢? 采用独热码为什么节省许多组合电路? 等等 ...
- Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...
- LeetCode Gray Code 格雷码
题意:提供一个数字n,代表二进制的个数,那么就有2的n次方个可能性了,从0到2^n-1.将其转成格雷码,再直接将二进制的格雷码按二进制的读法变成整数,装在vector容器中返回,要有序(否则你直接将0 ...
- 减治法在生成子集问题中的应用(JAVA)--递归、二进制反射格雷码
减治法在生成组合对象问题中的应用 生成子集问题:经典的背包问题就是求解一个最优子集的问题,这里我们来讨论一个更简单的问题.对于任意一个集合来说,它都存在2^n个子集(一个集合所有的子集集合称为幂集). ...
- 3D 机器视觉 01 - 格雷码在3D视觉中的运用和码位选择原则
1投影图像的编码方法: 常用的一种编码方法就是基于时间的编码方法. 该方法是将一系列投影图案在不同的时刻投射到被测物体的表面,像素的编码由物体表面反射的一系列值构成,因此这种方法被称为时间多路编码方法 ...
最新文章
- JavaScript中的HTTP GET请求?
- 建议15: 使用dynamic来简化反射实现
- 作者:男,博士,西南财经大学经济数学学院讲师、硕士生导师
- 霍金去世,巨星陨落!谨以此文缅怀霍金
- 二开版彩虹易支付全开源10套模板带风控实名系统源码
- jquery如何获取第一个或最后一个子元素?
- word2vec模型评估_NLP之文本分类:「Tf-Idf、Word2Vec和BERT」三种模型比较
- GARFIELD@01-25-2005
- java asm源码分析_探究CAS原理(基于JAVA8源码分析)
- [CTO札记]消除2种官僚文化现象
- params参数的调用
- 解决办法:Transport security has blocked a cleartext HTTP (http://) resource load since it is insecure. T
- UNITY自带的3D object没有三角形?
- 【Buzz】简介及第一个案例
- 二维码在企业移动中的应用
- U9单据打印模板自定义扩展字段显示名称
- 如何理解向量组的秩和矩阵的秩
- 关于Java垃圾回收问题的总结
- 微信小程序商城优势在什么地方
- Vue3+TypeScript实现网易云音乐WebApp(解析歌词,并实现自行匹配滚动)