[HDU5903]Square Distance(DP)

题意:给一个字符串t ,求与这个序列刚好有m个位置字符不同的由两个相同的串拼接起来的字符串 s,要求字典序最小的答案。

分析:按照贪心的想法,肯定在前面让字母尽量小,尽可能的填a,但问题是不知道前面填了那么多a之后后面能否填完(因为对于那些s[i]!=s[i+n/2]的位置,必定会有一次花费)

于是就想到用dp[i][j]表示i~n这段位置,花费j是否合法

贴上转移:

 1         dp[n/2][0]=1;
 2         for(int i=n/2-1;i>=0;--i)
 3             if(s[i]==s[i+n/2])
 4             {
 5                 for(int j=0;j<=m;++j) dp[i][j]|=dp[i+1][j];
 6                 for(int j=2;j<=m;++j) dp[i][j]|=dp[i+1][j-2];
 7             }
 8             else
 9             {
10                 for(int j=1;j<=m;++j) dp[i][j]|=dp[i+1][j-1];
11                 for(int j=2;j<=m;++j) dp[i][j]|=dp[i+1][j-2];
12             }

然后再从第一位开始贪心,尽可能小的放字母。

时间: 2024-10-10 04:47:36

[HDU5903]Square Distance(DP)的相关文章

BestCoder Round #87 1002 Square Distance[DP 打印方案]

Square Distance Accepts: 73 Submissions: 598 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 一个字符串被称为square当且仅当它可以由两个相同的串连接而成. 例如, "abab", "aa"是square, 而"aaa", "abba"不是. 两个长度相同字

hdu 5903 Square Distance(dp)

Problem Description A string is called a square string if it can be obtained by concatenating two copies of the same string. For example, "abab", "aa" are square strings, while "aaa", "abba" are not. Hamming distanc

HDU 5903 - Square Distance [ DP ] ( BestCoder Round #87 1002 )

题意: 给一个字符串t ,求与这个序列刚好有m个位置字符不同的由两个相同的串拼接起来的字符串 s, 要求字典序最小的答案    分析: dp[i][j] 表示 第i位及之后的总代价为j可不可行 从第 n/2-1 位推回第 0 位, 若dp[0][m] = 1,则存在 然后贪心对每一位从'a'试到'z',选取接下来存在解的字符 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #inclu

URAL 1073 Square Country(DP)

Square Country 大意: 买一块边长为 a 的正方形地需要的钱数是 a^2, 现在输入N为钱的数目,求最少购买地的块数可以凑够N. 思路:DP,由背包思想推出来的dp[i] = min(dp[i], dp[j-i*i]+1);  方块都是由正方形组成的,所以是i*i,循环的时候也是i*i. #include <stdio.h> #define min(a, b) ((a) > (b) ? (b) :(a)) int n; int dp[60005]; int main() {

HDU 5903 Square Distance (贪心+DP)

题意:一个字符串被称为square当且仅当它可以由两个相同的串连接而成. 例如, "abab", "aa"是square, 而"aaa", "abba"不是. 两个长度相同字符串之间的 hamming distance是对应位置上字符不同的位数. 给定一行字符串和 m,输出字典序最小的字符串. 析:首先先用dp判断能不能形成这样的字符串,然后再打印出来,dp[i][j] 表示 i - 中间的数能不能改 j 个字符得到,最后打印

HDU 1398 Square Coins(DP)

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8800    Accepted Submission(s): 5991 Problem Description People in Silverland use square coins. Not only they have square shapes but

hdu_5903_Square Distance(dp)

题目链接:hdu_5903_Square Distance 题意: 给你一个长度为n的a串,一个数m,现在让你构造一个长度也为n的b串,使这个串是由两个相同的串拼起来的,并且和a串对应的位不同的数量为m 题解: 1.可以知道构造的串前面和后面都是相同的,所以只需要构造前半段就行了,当然你可以分类讨论,然后构造 2.设dp[i][j]表示考虑到第i个字符已经有j个与a串对应位不同,然后状态转移方程看代码,注意的是这里要倒着转移回去 因为要满足最小的字典序,并且对应不同的位数为m,倒着转移构造m,最

HDU 5903 Square Distance

$dp$预处理,贪心. 因为$t$串前半部分和后半部分是一样的,所以只要构造前一半就可以了. 因为要求字典序最小,所以肯定是从第一位开始贪心选择,$a,b,c,d,...z$,一个一个尝试过去,如果发现某字符可行,那么该位就选择该字符. 第$i$位选择字符$X$可行的条件: 记这一位选择字符$X$的情况下,对$dis$的贡献为$Q$,$1$至$i-1$位对$dis$贡献和为$F$: 如果第$i+1$位至第$\frac{n}{2}$位,对$dis$的贡献可以凑出$m-Q-F$,那么该位选择$X$可

20200108-20200112

244. Shortest Word Distance II - Medium 245. Shortest Word Distance III - Medium 246. Strobogrammatic Number - Easy 247. Strobogrammatic Number II - Medium method: recursion n =1 [0,1,8] n = 2 [11, 88, 69, 96] n = 3 [101, 111, 181, 808, 818, 888, 609