【简单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 & ...
随机推荐
- 分享一道我认为非常有思考价值JavaScript题目
这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对JavaScript是有一定的理解的了.我会先将题目的图片截取出来,供大家思考,在结尾在给出我的分析过程和答案,作个总结. 好,废话不 ...
- Java邮件服务学习之四:邮箱服务客户端Spring Mail
一.Spring Mail API Spring邮件抽象层的主要包为org.springframework.mail,Spring提供的邮件发送不仅支持简单邮件的发送.添加附件. 1.邮件发送的核心接 ...
- HDU 5783 Divide the Sequence (贪心)
Divide the Sequence 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 Description Alice has a seq ...
- CodeForces 682B Alyona and Mex (排序+离散化)
Alyona and Mex 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/B Description Someone gave ...
- codeforces 624B Making a String
Making a String time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- [前端JS学习笔记]JavaScript CallBack
一.概念介绍 CallBack : "回调" . 在spring优秀框架回调无处不在, 回调的运用场景很多, 如 swt事件监听.netty等.它的主要作用是提高程序执行效率, 一 ...
- Centos上Apache重启,mysql重启, nginx 重启方法
1.重启 apache service httpd restrat /etc/init.d/httpd stop /etc/init.d/httpd start 2.重启 mysql service ...
- Codeforces Gym 100610 Problem A. Alien Communication Masterclass 构造
Problem A. Alien Communication Masterclass Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codefo ...
- android拦截短信并屏蔽系统的Notification
拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission ...
- QProcess调用外部程序方式的差异
众所周知QProcess类的作用是启动一个外部的程序并与之交互它有三种方式调用外部程序: 1. execute 2. start 3. startDetached 从调用上看: execute是阻塞调 ...