0
点赞
收藏
分享

微信扫一扫

分赃最优策略

yellowone 2022-01-10 阅读 26
javascript

看不明白题,然后去网上找的解析:

分析不出规律,接着继续推算一下

1 [100]
2 [0,100]
3 [0,0,100]
4 [1,1,0,98]
5 [0,2,1,0,97][2,0,1,0,97]
//6号需要得到3个人的支持,首先是4号给他1个即可,其次有2种方案;
//其一给3号2个,最后一个在1和2中选1个,5号给1或2的是2个,但是是不确定给1还是2的,所以获得1或2的支持,需要给他2个即可
//其二给1和2各2个,3号0个
6 [2,0,2,1,0,95][0,2,2,1,0,95][2,2,0,1,0,95]
//7号需要得到3个人的支持,首先是5号给他1个即可,其次有6种方案:
//1234号取2人各给2个即可,同样因为5,6号分配的不确定性,所以给2即可
7 [2,2,0,0,1,0,95][2,0,2,0,1,0,95][2,0,0,2,1,0,95][0,2,2,0,1,0,95][0,2,0,2,1,0,95][0,0,2,2,1,0,95]
//规律总结有点思绪了
//从5号开始,作为n+1号,放弃n号给他0个,获取n-1号的支持给他1个,在0~n-2之间找 Math.ceil(n/2)-1 个分别给2即可

[4,100]

var printOut = function(arr){
  let [n,m] = arr
  let flag = -1;
  let count = Math.ceil(n/2)-1
  switch(n+1){
  	case 1: flag=m; break;
  	case 2: flag=-1; break;
  	case 3: flag=m; break;
  	case 4: flag=m-2; break;
  	default: flag = (m-2*count-1)>=0?(m-2*count-1):-1; 
  }
  console.log(flag)
}
printOut([4,100])

结果:(可以直接复制以上代码,浏览器右键检查显示开发者模式,点击console栏,粘贴代码回车即可看到效果)

//printOut([4,100])
97
//printOut([5,100])
95
//printOut([6,100])
95
//printOut([6,5])
0
//printOut([6,4])
-1
//printOut([5,4])
-1
//printOut([4,4])
1
举报

相关推荐

0 条评论