usaco beads 再一次对DP的了解
来源:互联网 发布:mac understand 下载 编辑:程序博客网 时间:2024/05/05 10:19
刚做这个题目的时候,我不是用DP来做的,虽然效率还不错,但是写得很
乱。后来看了一下解题报告,看到了别人非常漂亮的用DP把它弄出来了,就想学
习一下动态规划的算法。这个题目是这样的,有一串项链,上面有三种颜色的珠
子,红,蓝,白,其中白色可以看作是与红色或蓝色同种颜色,如果在项链的某
一点处断开,那么在这一点处可以分别向左或向右收集到同种颜色的珠子,问从
哪一点处断开可以收集到最多的珠子数。并打印出最多的珠子的个数。
测试数据如下:
input
29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
乱。后来看了一下解题报告,看到了别人非常漂亮的用DP把它弄出来了,就想学
习一下动态规划的算法。这个题目是这样的,有一串项链,上面有三种颜色的珠
子,红,蓝,白,其中白色可以看作是与红色或蓝色同种颜色,如果在项链的某
一点处断开,那么在这一点处可以分别向左或向右收集到同种颜色的珠子,问从
哪一点处断开可以收集到最多的珠子数。并打印出最多的珠子的个数。
测试数据如下:
input
29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
output
11
在输入中w代表白色,b代表蓝色,r代表红色。收集到的11颗珠子为
wrwrrbwwwbb,是在第28和第29颗珠子中间断开。
这个题目用动态规划来解非常合适,动态规划的思想是:保存比较优的子解
然后用这些子解来构成最终的最优解。若要求在p点处断开能收集到的最多的
珠子,假设用max[p]来保存,则它是由从左边收集到的最多的珠子数和从右边
收集到的最多的珠子数组成的。而它所收集到的珠子可能是红色,也可能是蓝
色,分别用r[p],b[p]来存储,则对于左边而言。
r[0] = b[0] = 0;
if(c == 'r')
then r[p] = r[p-1]+1;
b[p] = 0;
if(c == 'b')
then b[p] = b[p-1]+1;
r[p] = 0;
if(c == 'w')
then r[p] = r[p-1]+1;
b[p] = b[p-1]+1;
对于右边则一样。只不过得从数组的未尾开始算即r[n] = b[n] = 0;
- usaco beads 再一次对DP的了解
- USACO beads
- usaco-beads
- USACO beads
- 【USACO】beads
- usaco beads
- USACO试题beads的两种解法
- usaco——beads
- USACO 1.1 beads
- 【备战蓝桥杯】USACO-> Beads
- USACO 1.1 beads
- usaco 1.1.4 beads
- USACO 1.1-beads
- 【备战蓝桥杯】USACO--> Beads 2.0
- USACO 1.1 Broken Necklace (beads)
- POJ - 3265/USACO - Jan07 Gold Problem Solving 动态规划(DP) | 对USACO官方题解0ms程序的解释
- USACO 1.1.4 Broken Necklace(beads)
- 历史再一次的重演
- 微软rdlc报表解析
- 做好面试前的准备工作
- 读取ini文件(转)
- CFtpConnection连接FTP(转)
- C#进程间调用控件方法
- usaco beads 再一次对DP的了解
- 5项基因改造让你拥抱大财富
- C#创建Microsoft Word文档(转)
- c#操作word 在指定书签插入文字或者图片(转)
- 有感于百度产品取名
- 央行再次下调金融机构人民币存贷款基准利率
- C# 套接字1(转)
- 连体型和连用型
- C# 套接字2