网站建设 北京昌平,网站建设方案书要怎么样写,微信公众号怎么做链接网站吗,上海商场网站开发P 个海盗偷了 D 颗钻石后来到公海分赃#xff0c;一致同意如下分赃策略#xff1a;
首先#xff0c;P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案#xff08;方案应给出每个海盗分得的具体数量#xff09;#xff0c;如果能够得到包括 1 号在…P 个海盗偷了 D 颗钻石后来到公海分赃一致同意如下分赃策略
首先P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案方案应给出每个海盗分得的具体数量如果能够得到包括 1 号在内的绝对多数即大于半数同意则按照该分配方案执行否则 1 号将被投入大海喂鲨鱼而后依次类似地由第 2 号、第 3 号等等海盗提出方案直到能够获得绝对多数同意的方案出现为止或者只剩下最后一位海盗其独占所有钻石。请编写一个程序给出第 1 号海盗的钻石分配方案中自己分得的钻石数量。
附带的三个假定
“聪明”与“贪婪”假定每个海盗总能够以本人利益最大化作为行为准则“人性化”假定在能够取得尽量多钻石的情况下海盗不会故意致同伙于死地“无偏见”假定海盗之间没有个人恩怨分给其他海盗钻石的次序以小序号优先为原则。
输入格式
输入在一行中给出 2 个正整数 D 和 P3≤P≤D≤100。
输出格式
输出第 1 号海盗的钻石分配方案中自己分得的钻石数量。
输入样例
10 7
输出样例
6
代码实现
#include stdio.h/*
2r: 0 D
3r: D-1 1 0
4r: D-3 0 2 1
5r: D-3 0 1 0 2
6r: D-4 0 1 2 1 0
7r: D-4 0 1 2 0 0 1
8r: D-5 0 1 2 0 1 1 0
9r: D-5 0 1 2 0 1 0 0 1
10r:D-6 0 1 2 0 1 0 1 1 0
往后递增时只要给前一次为0的人一块钻石
再给一个前一次为1的人2块钻石就可以获得一半以上的支持
*/int main() {int D, P;scanf(%d %d, D, P);if(P3)printf(%d\n,D-1);else printf(%d\n,D-(P/21));return 0;
}