hdu 5375 Gray code 【 dp 】】的更多相关文章

dp[i][j]表示第i位取j的时候取得的最大的分数 然后分s[i]是不是问号,s[i-1]是不是问号这大的四种情况讨论 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ; ]; int a[maxn]; char s[maxn]; int n; int main(){ int T; scanf("%d&qu…
Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 569    Accepted Submission(s): 337 Problem Description The reflected binary code, also known as Gray code after Frank Gray, is a binary…
Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 684    Accepted Submission(s): 402 Problem Description The reflected binary code, also known as Gray code after Frank Gray, is a binary…
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以为格雷码是由3个二进制字符转换的,于是妥妥wa了,事实上格雷码的求法是通过异或求的的,即Gi=Bi⊕Bi-1(G为格雷码,B为二进制数),那么仅仅要水水的DP一下就好了.详细DP是通过保存 DP[i][j],当中i为当前位.j表示当前为为0还是1,递推式为: 一.s[i]为0时 1.s[i-1]为0…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 626    Accepted Submission(s): 369 Problem Description The reflected binary cod…
Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 129    Accepted Submission(s): 68 Problem Description The reflected binary code, also known as Gray code after Frank Gray, is a binary n…
题目连接 : 传送门 题意: 给定一个长度为的二进制串和一个长度为n的序列a[],我们能够依据这个二进制串得到它的Gray code. Gray code中假设第i项为1的话那么我们就能够得到a[i]的值,在原来的二进制串中有一些位置为? 表示能够为0, 也能够为1求最后所能得到的最大的值. 已知二进制码怎样得到Gray code请看:传送门 分析: 我们能够通过动态规划来解决问题,状态转移也很好找 ,dp[i][j]表示到第i个位置.第i个位置 取j所能得到的最大值.非常明显这个题的j仅仅能有…
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int N=200000+5; const int inf=1<<24; int dp[N][2],a[N]; char s[2*N]; int main() { int n,m,i,_; scanf("%d",&_); for(int k=1;k<=_;k+…
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] 表示 在时刻为t的时候 坐标为j 的时刻 可以获得的最多馅饼数 dp[i][j] += max(dp[i + 1][j - 1], dp[i + 1][j], dp[i + 1][j + 1]); 最后状态会转移到 dp[1][4], dp[1][5], dp[1][6] 去三值中的最大值 AC代…
题意:给出n个月,雇佣一个人所需的钱hire,一个人工作一个月所需要的钱salary,解雇一个人所需要的钱fire,再给出这n个月每月1至少有num[i]个人完成工作,问完成整个工作所花费的最少的钱是多少. 用dp[i][j]表示在第i个月雇佣j个人所需要的最少花费 先考虑只解雇人和聘请人的情况 for(j=num[i];j<=sum;j++) { ])//说明雇佣了人 dp[i][j]=dp[i-][num[i-]]+j*salary+(j-num[i-])*hire; else//说明解聘了…