hdu 5375 Gray code(dp)
来源:互联网 发布:mac怎么接有线打印机 编辑:程序博客网 时间:2024/05/13 12:17
题意:
给一个二进制码,其中有些位置有问号
可以在问号处填0或者1
转换后的格雷码的第i个位置如果是1,那么就得到a[i]的权值。
问最大能得到多少权值
解析:
由二进制码转换为格雷码的公式为将二进制码右移一位然后与原来的二进制码按位异或。
所以开一个dp数组
dp[i][0]表示第i位是0得到的最大值
dp[i][1]表示第i位是1得到的最大值
那么0只能由1 oxr 1 ,或者0 xor 0转移而来
所以dp[i][0]=max(dp[i−1][0],dp[i−1][1]+a[i]) 那么1只能由1 oxr 0 ,或者0 xor 0转移而来
所以dp[i][1]=max(dp[i−1][1],dp[i−1][0]+a[i])
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int MAXN = 200005;char bit[MAXN];int A[MAXN], dp[MAXN][2];int main() { int T, cas = 1; scanf("%d", &T); while(T--) { scanf("%s", bit+1); int len = strlen(bit+1); 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(bit[i] == '1') { dp[i][1] = max(dp[i-1][0] + A[i], dp[i-1][1]); dp[i][0] = -INF; }else if(bit[i] == '0') { dp[i][0] = max(dp[i-1][1] + A[i], dp[i-1][0]); dp[i][1] = -INF; }else if(bit[i] == '?') { dp[i][1] = max(dp[i-1][0] + A[i], dp[i-1][1]); dp[i][0] = max(dp[i-1][1] + A[i], dp[i-1][0]); } } printf("Case #%d: %d\n", cas++, max(dp[len][0], dp[len][1])); } return 0;}
0 0
- HDU 5375 Gray code(DP)
- hdu 5375 Gray code(DP)
- HDU 5375 Gray code(DP)
- hdu 5375 Gray code(dp)
- hdu 5375 Gray code(dp)
- HDU 5375 Gray code (简单dp)
- hdu 5375 Gray code dp
- hdu 5375 Gray code (dp)
- hdu 5375 Gray code dp
- hdu 5375 Gray code (DP)
- hdu 5375 Gray code (DP)
- hdu 5375 Gray code (简单DP)
- HDU 5375 Gray code //递推dp
- hdu 5375 - Gray code(dp) 解题报告
- HDU 5375(Gray code-格雷码dp)
- [HDU 5375 Gray code] 15多校赛DP
- HDU 5375 Gray code
- HDU 5375 Gray code
- 浅谈Atlassian产品搭建的敏捷管理体系(二)——Confluence使用
- String.format(“%02d”, 5) 是什么意思
- hdu 1195 Open the Lock(基础bfs)
- poj2421 Constructing Roads【最小生成树】
- spring4+quartz实现定时刷新
- hdu 5375 Gray code(dp)
- aes的几种模式简单说明
- Android动态改变控件的位置
- C++_const成员函数
- MapReduce将HDFS文本数据导入HBase中
- 谈谈c++纯虚函数的意义!
- 如何MYSQL实现连接池
- 在linux jexus下新建站点
- Algorithms—129.Sum Root to Leaf Numbers