【简单dp+模拟】hdu-5375(2015多校#7-1007)
给你一个二进制数,,每一位有一个权值,让你转格雷码,求所对应格雷码位为1的权值的和;二进制位中的某些位为?,你需要给这些问号赋值使得到的和最大。
首先你得知道二进制转格雷码的规则,即格雷码位为【二进制位与左边前一位的异或值】,格雷码首位为二进制首位;
因为格雷码首位为二进制首位,那么可以视二进制首位的左边前一位是0;
然后你就可以分情况模拟了:
1、连续数字的情况直接计算即可;
2、连续问号的情况需要dp一下:dp[k][j]表示第k个问号是j时,得到的最大和,那么dp[k][j] = max(dp[k-1][!j]+w[i], dp[k-1][j]);首尾的细节处要处理好;
这里也可以不用dp直接模拟求,需要分一下问号数的奇偶性,比较复杂不再讨论了;
附代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn = ;
char bin[maxn];
int w[maxn];
int dp[maxn][]; int main()
{
int T;
scanf("%d", &T);
for(int kase = ; kase <= T; kase++)
{
scanf("%s", bin+);
bin[] = '';
int len = strlen(bin+);
for(int i = ; i<= len; i++)
scanf("%d", &w[i]); int ans = , i = len;
while(i >= )
{
if(bin[i] != '?')
{
if(bin[i-] == '?') // X????1 连问号且尾接数字,dp[i][j]为(从右向左问号的)第i位为j时最大值:dp[i][j] = (dp[i][!j]+w[i] , dp[i][j]);
{
int pos = ; //注意结尾的数字要单独考虑,结尾(bin[i])是1,则dp[1][0]=w[i],dp[1][1]=0;是0,则dp[1][1]=w[i],dp[1][0]=0
dp[pos][] = w[i]*((bin[i]-'')^);
dp[pos][] = w[i]*((bin[i]-'')^);
pos++; i--; //i指向当前考虑的格雷码位,pos指向i的前一位对应的从右向左的第几个'?'
while(i && bin[i-] == '?')
{
dp[pos][] = max(dp[pos-][] + w[i], dp[pos-][]);
dp[pos][] = max(dp[pos-][] + w[i], dp[pos-][]);
pos++; i--;
}
//前面的数字也要单独考虑,若bin[i-1]是1,则max_val=max(dp[pos-1][0] + w[i], dp[pos-1][1]);
dp[pos][bin[i-] - ''] = max(dp[pos-][!(bin[i-] - '')] + w[i], dp[pos-][bin[i-] - '']);
ans += dp[pos][bin[i-] - ''];
i--;
}
else // X11111 连数字,直接与前一位异或计算即可
{
while(i && bin[i-] != '?')
{
ans += ((bin[i]-'')^(bin[i-]-'')) * w[i];
i--;
}
}
}
else // X???? 连问号且尾不接数字,可以保证其格雷码'?'处全为1
{
while(i && bin[i] == '?')
{
ans += w[i];
i--;
}
}
}
printf("Case #%d: %d\n", kase, ans);
}
return ;
}
hdu 5375
最近易激动,大约是亲戚来的缘故吧。有点想家了。
加油吧,在这个优胜劣汰的游戏中,努力生存下去吧。
【简单dp+模拟】hdu-5375(2015多校#7-1007)的更多相关文章
- hdu 5288||2015多校联合第一场1001题
pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...
- HDU 5373(2015多校7)-The shortest problem(模拟%11)
题目地址:pid=5373">HDU 5373 题意:给你一个数n和操作次数t,每次操作将n的各位数之和求出来放在n的末尾形成新的n,问t次操作后得到的n能否够被11整除. 思路:就是 ...
- HDU 5745 La Vie en rose (DP||模拟) 2016杭电多校联合第二场
题目:传送门. 这是一道阅读理解题,正解是DP,实际上模拟就能做.pij+1 指的是 (pij)+1不是 pi(j+1),判断能否交换输出即可. #include <iostream> # ...
- HDU 5410(2015多校10)-CRB and His Birthday(全然背包)
题目地址:HDU 5410 题意:有M元钱,N种礼物,若第i种礼物买x件的话.会有Ai*x+Bi颗糖果,现给出每种礼物的单位价格.Ai值与Bi值.问最多能拿到多少颗糖果. 思路:全然背包问题. dp[ ...
- HDU 5326(2015多校3)-Work(dfs)
题目地址:pid=5326">HDU 5326 题意:给一张有向图n个点.n - 1(....输入n-1)条边. A指向B代表A管理B.然后能够间接管理,比方A管理B,B管理C.则A管 ...
- HDU 5407(2015多校10)-CRB and Candies(组合数最小公倍数+乘法逆元)
题目地址:pid=5407">HDU 5407 题意:CRB有n颗不同的糖果,如今他要吃掉k颗(0<=k<=n),问k取0~n的方案数的最小公倍数是多少. 思路:首先做这道 ...
- hdu 5361 2015多校联合训练赛#6 最短路
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total ...
- HDU 5371(2015多校7)-Hotaru's problem(Manacher算法求回文串)
题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...
- HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
pid=5358">HDU 5358 题意: 求∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...
随机推荐
- 客户端接口AGENDA
日程 周二上午:完善客户端功能.接口定义. 周二下午:助教审查客户端代码.审查完成之后将发布接口定义. 提示 总之谢谢大家的支持.我们会尽量降低交互难度,让各位亲把精力专注于算法设计上面. 可以使用任 ...
- Argument 'xxx' is not a function, got undefined,初学Angular的第一个坑
终于考完试了,在没更新的这一段时间里,一直都在忙于应付考试.不过在期间也是接触到不少好玩的东西,比如Html5的Canvas,我用lufylegend的Html5引擎做了个<看你有所色>的 ...
- 自定义使用AVCaptureSession 拍照,摄像,载图
转载自 http://blog.csdn.net/andy_jiangbin/article/details/19823333 拍照,摄像,载图总结 1 建立Session 2 添加 input ...
- type=INNODB和engine=INNODB的区别
我在网站下载了一份源码,学习中, 发现type=INNODB,这个数据库引擎老实出错,,后来才一查资料才是: 在MYSQL5.5及以后版本中type=InnoDB 由ENGINE=InnoDB 代替. ...
- Unity3D之Mecanim动画系统学习笔记(四):Animation State
动画的设置 我们先看看Animation Clip的一些设置: Loop time:动画是否循环播放. 下面出现了3个大致一样的选项: Root Transform Rotation:表示为播放动画的 ...
- sqlserver2012
sqlserver2012作死的节奏啊,微软最近怎么了?搞个sqlserver2012死活安装不上,无论如何都是.NET Framework 4报错,机器本身的版本比安装包的高就报错?微软的程序员思维 ...
- CKeditor3.6.2 配置与精简
一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...
- skyline TerraBuilder 制作MPT方法与技巧(2)
制作MPT的方法可以看这里<skyline TerraBuilder 制作MPT方法与技巧(1)>http://www.cnblogs.com/cannel/p/3622447.html ...
- xcode 左边导航栏中,类文件后面的标记“A”,"M","?"……等符号的含义???
"M" = Locally modified "U" = Updated in repository "A" = Locally a ...
- DataTable转换为List<Model>的通用类
在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便. 所以很多人都是按照以下方式做的: // 获得查询结果DataTable dt = DbHelper ...