Hdu 5375 Gray code
来源:互联网 发布:java词典 编辑:程序博客网 时间:2024/06/06 00:59
纪念一下比赛中第一个出的dp,虽然写的代码并不怎么好,还要加栈。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375
大致题意:给出一段“普通的二进制码”要求转换成“Gray码”每个字母(0或1)对应一个rank,如果对应值是1则可取到,反之则不可取到。求整个二进制码转换成Gray码后的总rank值,两个码之间怎么转换下边有定义,我就不再班门弄斧了:http://baike.baidu.com/view/358724.htm
我写的记忆化搜索如下,应该许多大牛们写的都是递推式了
#pragma comment(linker,"/STACK:1024000000,1024000000")//手工加栈#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 300000using namespace std;int len;char s[MAXN];int r[MAXN];long long dp[MAXN][3];long long dfs(int now,int tmp){ int ans; int c; if(now==-1) c=0; else c=tmp; if(now==len-2) { int x=len-1; if(s[x]=='?') ans=max((c^0)*r[x],(c^1)*r[x]); else { int ta=s[x]-'0'; ans=(c^ta)*r[x]; } } else if(dp[now+1][c]!=-1) ans=dp[now+1][c]; else { if(s[now+1]=='?') { ans=max(dfs(now+1,0)+((c^0)*r[now+1]),dfs(now+1,1)+((c^1)*r[now+1])); } else { int nex=s[now+1]-'0'; ans=dfs(now+1,nex)+((nex^c)*r[now+1]); } } dp[now+1][c]=ans; return ans;}int main(){ int T,times=1; scanf("%d",&T); while(T--) { memset(dp,-1,sizeof(dp)); scanf(" %s",s); len=strlen(s); for(int i=0;i<len;i++) scanf("%d",&r[i]); long long ans; if(len%2) ans=dfs(-1,0); else { if(s[0]=='?') ans=max(dfs(0,0),dfs(0,1)+r[0]); else { int f=s[0]-'0'; if(f) ans=dfs(0,f)+r[0]; else ans=dfs(0,f); } } if(ans==-1) ans=0; printf("Case #%d: %I64d\n",times++,ans); } return 0;}
0 0
- HDU 5375 Gray code
- HDU 5375 Gray code
- hdu 5375 Gray code
- Hdu 5375 Gray code
- HDU 5375 Gray code
- hdu 5375 gray code
- HDU 5375 Gray code
- HDU 5375 Gray code
- HDU 5375 Gray code
- HDU 5375 Gray code
- 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(模拟)
- hdu 5375 Gray code (简单DP)
- HDU 5375 Gray code(DP)
- Kali Linux 2.0安装光盘分享
- poj3273 最大值最小化
- spring注解形式aop实现
- 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
- NodeJs教程
- Hdu 5375 Gray code
- Visual Studio 2013引入源文件(CPP)回顾,以FASTDB为例
- 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现
- 【VR】Leap Motion 官网文档 LeapRecorder (Leap记录器)
- 我与英语技术书籍
- 树状数组
- 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现
- EventBus框架原理解析(结合源码)(下)
- 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析