问题求解07动态规划.pptVIP

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
陪审团的人选 问题描述 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中挑选的。先随机挑选 n 个人作为陪审团的候选人,然后再从这 n 个人中选 m 人组成陪审团。 选 m 人的办法是:控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从 0 到 20。 为了公平起见,法官选出陪审团的原则是:选出的 m 个人,必须满足辩方总分和控方总分的差的绝对值最小。 如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。 最终选出的方案称为陪审团方案。 陪审团的人选 输入数据 输入包含多组数据。每组数据的第一行是两个整数 n 和 m,n 是候选人数目,m 是陪审团人数。注意,1≤n ≤ 200, 1 ≤ m ≤ 20 而且 m ≤ n。接下来的 n 行,每行表示一个候选人的信息,它包含 2 个整数,先后是控方和辩方对该候选人的打分。候选人按出现的先后从 1 开始编号。两组有效数据之间以空行分隔。最后一组数据 n=m=0 输出要求 对每组数据,先输出一行,表示答案所属的组号, 如 ‘Jury #1’, ‘Jury #2’, 等。接下来的一行要象例子那样输出陪审团的控方总分和辩方总分。再下来一行要以升序输出陪审团里每个成员的编号,两个成员编号之间用空格分隔。每组输出数据须以一个空行结束。 输入样例 输出样例 4 2 1 2 2 3 4 1 6 2 0 0 Jury #1 Best jury has value 6 for prosecution and value 4 for defence: 2 3 陪审团的人选 为叙述问题方便,现将任一选择方案中,辩方总分和控方总分之差简称为“辩控差”,辩方总分和控方总分之和称为“辩控和”。 第 i 个候选人的辩方总分和控方总分之差记为 V(i),辩方总分和控方总分之和记为 S(i)。 f (j, k)表示,取 j 个候选人,使其辩控差为 k 的所有方案中,辩控和最大的那个方案(该方案称为“方案 f (j, k)”)的辩控和。并且规定,如果没法选 j 个人,使其辩控差为 k,那么 f (j, k) 的值就为-1,也称方案 f (j, k)不可行。 本题是要求选出 m 个人,那么,如果对 k 的所有可能的取值,求出了所有的 f (m, k) (-20×m≤ k ≤ 20×m),那么陪审团方案自然就很容易找到了。 陪审团的人选 方案 f (j, k)是由某个可行的方案 f (j-1, x) ( -20×m ≤ x ≤ 20×m) 演化而来的。 可行方案 f (j-1, x)能演化成方案 f (j, k)的必要条件是: 存在某个候选人 i,i 在方案 f (j-1, x)中没有被选上,且 x+V(i) = k。 在所有满足该必要条件的 f (j-1, x)中,选出 f(j-1, x) + S(i) 的值最大的那个,那么方案 f (j-1, x)再加上候选人i,就演变成了方案 f(j, k)。 这中间需要将一个方案都选了哪些人都记录下来。 将方案 f(j, k)中最后选的那个候选人的编号,记在二维数组的元素path[j][k]中。 那么方案 f (j, k)的倒数第二个人选的编号,即 path[j-1][k-V[path[j][k]]。 假定最后算出了解方案的辩控差是 k,那么从 path[m][k]出发,就能顺藤摸瓜一步步求出所有被选中的候选人。 陪审团的人选 初始条件,只能确定 f(0, 0) = 0。由此出发,一步步自底向上递推,就能求出所有的可行方案 f(m, k)( -20×m ≤ k ≤ 20×m)。 实际解题的时候,会用一个二维数组 f 来存放 f(j, k)的值。而且,由于题目中辩控差的值 k 可以为负数,而程序中数租下标不能为负数,所以,在程序中不妨将辩控差的值都加上 400,以免下标为负数导致出错,即题目描述中,如果辩控差为 0,则在程序中辩控差为 400。 陪审团的人选 int f[30][1000]; //f[j, k]表示,取 j 个候选人,使其辩控差为 k 的所有方案中, //辩控和最大的那个方案(该方案称为方案 f(j, k))的辩控和。 int Path[30][1000]; //Path 数组用来记录选了哪些人 //方案 f(j, k)中最后选的那个候选人的编号,记在 Path[j][k]中 int P[300]; //控方打分 int D[300]; //辩方打分 int Answer[30]; //存放最终方案的人选 int CompareInt(const void * e1, const void * e2) { return * ((int *)

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档