题目描述:
有一些红色和绿色的方块,从左到右排成一行。接下来你可以用红色或绿色对任意一个方块进行染色,使方块原有的颜色被覆盖掉。为了使在完成所有的染色操作后,红色方块都比绿色方块更靠近左侧,问至少需染几个方块。
代码如下:
%动态规划
blocks = input('输入方块颜色的字符串:');
%dp的初始值为所有红色块都位于绿色块右侧时,需染涂的方块个数
dp(1) = sum(blocks=='R');
for i = 1:length(blocks)
if blocks(i) == 'G'
dp(i+1) = dp(i) +1;
else
dp(i+1) = dp(i) -1;
end
end
str = ['至少需染',num2str(min(dp)),'个方块',];
disp(str);
测试:
>> red_green_blocks
输入方块颜色的字符串:'RGRGR'
至少需染2个方块