Matlab编程练习5

问题

(问题都是来源某牛的题,用matlab编程实现)

给你一个由若干 0 和 1 组成的字符串s,请 你计算并返回将该字符串分割成两个子字符 串(即左子字符串和右子字符串, 子字符串允许为空)所能获得的最大得分。
已知分割字符串的得分规则如下:
左子字符串中:0得2分,1得1分
右子字符串中:1得2分,0得1分
子字符串为空则得0分

输入例子
  输入描述:
  第一行为A公司的的人员id列表, 0< id数量 < 10000,用空格切分
  第二行为B公司的人员id列表, 0< id数量 < 10000,用空格切分
  下面有n行,每一行为每个子项目的合作对应关系,为两个id,第一个为A公司的员工id,第二个为B公司的员工id,用空格区分

011101

输出例子

11

例子说明
  当左子字符串 = “0” 且 右子字符串 = “11101”,得分最大= 2+ 9 = 11


解题思路

  这题难度不大,很明显可以有两种处理方法,1种是直接分割出左右字符串(分割策略是将0多的字符串分割左边,1多的字符分割到右边);第2种是直接穷举出所有左右字符串的组合,然后计算…


Matlab代码实现

s='0111000111011111110000001111001101001101';
if s(1)=='1'              %特例
    disp(2);
    return;
end
%% 非穷举分割策略,尽量将0分割到左字符串,将1分割到右字符串
%% 穷举
maxV=0;
for i=1:size(s,2)        %左字符串的长度
    left=[];
    right=[];
    maxl=0;
    maxr=0;
    for j=1:i            %左字符串
        if s(j)=='0'
            maxl=maxl+2;
        elseif s(j)=='1'
            maxl=maxl+1;
        end
    end
    for k=i+1:size(s,2)  %右字符串
        if s(k)=='1'
            maxr=maxr+2;
        elseif s(k)=='0'
            maxr=maxr+1;
        end
    end
    maxlr=maxl+maxr;
    if maxlr>maxV
        maxV=maxlr;
    end
end
disp(maxV);

总结

   这里我只实现了比较容易实现的穷举法,直接法留给读者…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值