2013-2014 ACM ICPC Central European Regional Contest (CERC 13) K题(dp)

2013-2014 ACM ICPC Central European Regional Contest (CERC 13) K题(dp)

题意:给出n个,长度为2的限制出现的字符串,构造一个字符正方形,使得每一行从左往右读,每一列从上往下读都不会出现限制字符串,超过20*20就构造20*20。

解题思路:先把题目转换一下,26个字母两两组合,一共是26*26种方法,去掉限制的,剩下的就是能用的了。开个26*26的数组,把不能用的标记掉。做比赛的时候还是想到了一点,就是先构造一个尽可能长的,能循环的,即最后一个字符跟第一个字符组合也是能用的,不包含限制字符串的串,然后往矩阵里面填,因为能循环,所以肯定能把这个正方形填满。但是写完交上去,wa了。因为这样并不是最优的,比如能用的有6个字符串分别是:

ab

bc

cd

de

ef

fg

那么这样能构造的正方形大小是4*4的,如图:


好了,找到数据了,那么再找找规律,就好构造了。其实就是构造两个长度尽可能长,且第一个串的结尾与第二个串的开头相接不会被限制,(如上图),且长度相同的串就好了。用dp[i][j][k],表示能否构造出以i开头,以j结尾,长度为k的串,dp转移就是类似floyd(我能说这就是floyd吗?),完了之后输出路径把两个字符串保存下来,然后按规律填到正方形里面。

代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值