机试: M个强盗和N个村民过河,求总的渡河次数

题目:

M个强盗和N个村民过河,
当河的两边强盗个数多于平民个数时, 村民会被杀死;
只有一艘小船,每次最多载两个人;

0<=M<=N

在保证所有村民都不被杀死的情况下,计算总的渡河次数。 如果不能满足条件, 返回-1.

实例
输入 2 2
输出 5

第一回: 1强盗+1个村民过河, 村民回来, 此时河对岸1个强盗, 这边2村民+1强盗
第二回:两个村民渡河, 一个村民返回来, 此时河对岸1个强盗+1个村民, 这边1村民+1强盗
第三回: 1村民+1强盗 一起渡河
总共5次, 因此输出5.

class Solution {
    int crossRiver(int m, int n) {// m强盗n平民
        if (m+n<=2) return 1;
        if (m<n) return (m+n-2)*2+1;
        if (m==2) return 5;
        if (m==3) return 11;
        return -1;
    }
}

参考:
https://leetcode.cn/circle/discuss/JnbCkZ/

posted @ 2022-08-11 16:42  麦克斯的园丁  阅读(255)  评论(0编辑  收藏  举报