首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

跪求思路。解决方法

2013-11-23 
跪求思路。。。。help,求思路。。。。算法实现题3-2 蛋糕问题描述有一个由N块小蛋糕拼起来的长蛋糕。每个小蛋糕有一

跪求思路。。。。
help,求思路。。。。


算法实现题3-2 蛋糕
问题描述
有一个由N块小蛋糕拼起来的长蛋糕。每个小蛋糕有一种颜色,为蓝色或者红色或者黄色。
我们用小写字母表示颜色,’a’表示蓝色,’b’表示红色,’c’表示黄色。现在有两个人要切蛋糕吃。
A每次只切’abc’这样的连续的一段,也就是蓝色、红色、黄色连着的蛋糕。B每次只切’bca’
这样的连续的一段。并且,他们必须吃一样数量的蛋糕。假设A切了x个蛋糕,B切了y个蛋糕,
那么他们两只能吃min(x,y)个蛋糕。现在给出N块蛋糕的颜色,请问A和B最多能吃多少块小
蛋糕?
数据输入
输入为一行只包含’a’、’b’、’c’的非空字符串,表示小蛋糕的颜色,长度不超过1000。
数据输出
输出A和B最多能吃多少块小蛋糕。
输入示例输出示例
abcabcabcabca 6
[解决办法]
已知N块蛋糕颜色,则可知A最多能吃的蛋糕组数量,即abc块的数量,设为M0,
同理B最多能吃bca块的数量为M1。
用你给的abc abc abc abc a的例子来讲,可知M0=M1=4。
以M0定义的一个数组为{0,3,6,9}以M1定义的一个数组为{1,4,7,10}
数组内元素均为A或者B可以开始吃的蛋糕的下标。即A能吃0-2,3-5。。。,B同理。
这样就是开始求如下:
0-2,3-5,6-8, 9-11   :M0
1-3,4-6,7-9,10-12   :M1
可以看到他们是有互相重叠的,假设A最多能吃x组abc,x<=M0,这里开始循环遍历,
当x==M0时,M1内没有被全部M0组重叠的个数;
当X==M0-1时,这里X可以出现C(M0,1)中可能,照旧依次计算M1内没有被重叠的个数,
当X==M0-2时,这里X可以出现C(M0,2)中可能,照旧依次计算M1内没有被重叠的个数,
。。。
循环到X==1,找两者的最平衡值即可。

过程可以看到运算相当繁琐。
[解决办法]
dp[n][m]表示前n个小蛋糕,A切出m块的时候,B最多能吃几块。然后可以作出一个平方复杂度的dp。
[解决办法]
引用LS。
LZ题目并没有说必须从头开始切蛋糕,所有最优解有可能出现在A从中间某个位置开始切,或者从后开始切。

热点排行