HDU5375 Gray code
来源:互联网 发布:linux 压缩文件夹 命令 编辑:程序博客网 时间:2024/05/22 08:03
这是今天的多校题,题意是,给你一个二进制字符串s,里面有‘0’,‘1’,‘?’三种字符,?代表不确定,可以是0,也可以是1,取决于你。然后再给你大小为字符串长度的整数数组a。你要先将字符串s转换成对应的格雷码字符串s',a[i]对应s'[i],当s'[i]==‘1’时,你可以得到a[i],问,你最多得到的a[i]之和是多少?
今天,这道题让人很伤心,我们题意理解对了,但题目中给的图片是3个字符的格雷码,所以我们以为格雷码是三个三个转换的。提交的程序一直WA,没有过,最后一小时,我们才开始意识到可能是格雷码的转换问题,最后找到了定义,才恍然大悟。我们于是用搜索,但剪枝没成功,TLE了,然后,想到dp,但时间不够,还有最后几分钟,草草写了程序,就交了,又WA。赛后,经过调试,终于过了。哎,把“坑爹”的题目的格雷码转换图发上来吧
格雷码转换规则是这样的
最后把赛后调试过了的代码发上来吧
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>using namespace std;char s[200010];int a[200010];int dp[200010][2];int main(){ int cc; cin>>cc; int cnt=0; while(cnt<cc) { cnt++; memset(s,0,sizeof(s)); memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); scanf(" %s",s); int n=strlen(s); for(int i=0;i<n;i++) scanf("%d",&a[i]); dp[0][0]=0; dp[0][1]=0; if(s[0]=='1') { dp[0][1]=a[0]; } else if(s[0]=='?') { dp[0][1]=a[0]; dp[0][0]=0; } for(int i=1;i<n;i++) { if(s[i]=='1') { if(s[i-1]=='0') dp[i][1]=dp[i-1][0]+a[i]; else if(s[i-1]=='1') dp[i][1]=dp[i-1][1]; else { dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]); } } else if(s[i]=='0') { if(s[i-1]=='0') dp[i][0]=dp[i-1][0]; else if(s[i-1]=='1') dp[i][0]=dp[i-1][1]+a[i]; else { dp[i][0]=max(dp[i-1][1]+a[i],dp[i-1][0]); } } else { if(s[i-1]=='0') { dp[i][1]=dp[i-1][0]+a[i]; dp[i][0]=dp[i-1][0]; } else if(s[i-1]=='1') { dp[i][0]=dp[i-1][1]+a[i]; dp[i][1]=dp[i-1][1]; } else { dp[i][0]=max(dp[i-1][1]+a[i],dp[i-1][0]); dp[i][1]=max(dp[i-1][0]+a[i],dp[i-1][1]); } } } int sum=0; sum=max(dp[n-1][1],dp[n-1][0]); cout<<"Case #"<<cnt<<": "<<sum<<endl; } return 0;}
0 0
- HDU5375 Gray code
- HDU5375 Gray code
- hdu5375 Gray code
- hdu5375 Gray code
- hdu5375 Gray code(DP)
- hdu5375 Gray code(动态规划)
- hdu5375 Gray code(简单DP)
- hdu5375(2015多校7)--Gray code(dp)
- Gray code(hdu5375+异或二进制的规律)
- Gray Code
- Gray Code
- gray code
- Gray Code
- Gray Code
- Gray Code
- Gray Code
- Gray Code
- Gray Code
- 如何申请百度ak
- HDU 5372 Segment Game
- java微信开发自定义菜单
- Download Manager (HDU3233,UVA12231,UVALive4486) 解题报告
- Java 多线程实现的两种方式
- HDU5375 Gray code
- iOS项目开发实战——iOS网络编程获取网页Html源代码
- 带分区的UITableView的创建(省市区字典)
- 窗口与视图UIScreen and UIView
- (3.1.4.2)struts1和struts2
- HDU 5373 The shortest problem
- 修改Android studio 中svn版本
- android ButterKnife
- threading.Timer