青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

POJ 1015 Jury Compromise 動態規劃

Description

In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of members of the general public. Every time a trial is set to begin, a jury has to be selected, which is done as follows. First, several people are drawn randomly from the public. For each person in this pool, defence and prosecution assign a grade from 0 to 20 indicating their preference for this person. 0 means total dislike, 20 on the other hand means that this person is considered ideally suited for the jury.
Based on the grades of the two parties, the judge selects the jury. In order to ensure a fair trial, the tendencies of the jury to favour either defence or prosecution should be as balanced as possible. The jury therefore has to be chosen in a way that is satisfactory to both parties.
We will now make this more precise: given a pool of n potential jurors and two values di (the defence's value) and pi (the prosecution's value) for each potential juror i, you are to select a jury of m persons. If J is a subset of {1,..., n} with m elements, then D(J ) = sum(dk) k belong to J
and P(J) = sum(pk) k belong to J are the total values of this jury for defence and prosecution.
For an optimal jury J , the value |D(J) - P(J)| must be minimal. If there are several jurys with minimal |D(J) - P(J)|, one which maximizes D(J) + P(J) should be selected since the jury should be as ideal as possible for both parties.
You are to write a program that implements this jury selection process and chooses an optimal jury given a set of candidates.

Input

The input file contains several jury selection rounds. Each round starts with a line containing two integers n and m. n is the number of candidates and m the number of jury members.
These values will satisfy 1<=n<=200, 1<=m<=20 and of course m<=n. The following n lines contain the two integers pi and di for i = 1,...,n. A blank line separates each round from the next.
The file ends with a round that has n = m = 0.

Output

For each round output a line containing the number of the jury selection round ('Jury #1', 'Jury #2', etc.).
On the next line print the values D(J ) and P (J ) of your jury as shown below and on another line print the numbers of the m chosen candidates in ascending order. Output a blank before each individual candidate number.
Output an empty line after each test case.

Sample Input

4 2
1 2
2 3
4 1
6 2
0 0 

Sample Output

Jury #1
Best jury has value 6 for prosecution and value 4 for defence:
2 3 

Hint

If your solution is based on an inefficient algorithm, it may not execute in the allotted time.

Source

 

    在遙遠的國家佛羅布尼亞,嫌犯是否有罪,須由陪審團決定。陪審團是由法官從公眾中挑選的。先隨機挑選n 個人作為陪審團的候選人,然后再從這n 個人中選m 人組成陪審團。選m 人的辦法是:控方和辯方會根據對候選人的喜歡程度,給所有候選人打分,分值從0 到20。為了公平起見,法官選出陪審團的原則是:選出的m 個人,必須滿足辯方總分和控方總分的差的絕對值最小。如果有多種選擇方案的辯方總分和控方總分的之差的絕對值相同,那么選辯控雙方總分之和最大的方案即可。最終選出的方案稱為陪審團方案。
    為敘述問題方便,現將任一選擇方案中,辯方總分和控方總分之差簡稱為“辯控差”,辯方總分和控方總分之和稱為“辯控和”。第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, 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。

#include <iostream>
using namespace std;

int p[201],d[201],result[21];
int dp[21][801],path[21][801];

int cmp(const void *a,const void *b){
    
return *(int *)a-*(int *)b;
}

bool select(int a,int b,int i){
    
while(a>0 && path[a][b]!=i){
        b
-=p[path[a][b]]-d[path[a][b]];
        a
--;
    }

    
return (a!=0)?true:false;
}

int main(){
    
int i,j,k,a,b,n,m,origin,ca=1;
    
while(scanf("%d %d",&n,&m),n||m){
        
for(i=1;i<=n;i++)
            scanf(
"%d %d",p+i,d+i);
        memset(dp,
-1,sizeof(dp));
        memset(path,
0,sizeof(path));
        origin
=m*20;
        
for(dp[0][origin]=j=0;j<m;j++)
            
for(k=0;k<=origin*2;k++)
                
if(dp[j][k]>=0){
                    
for(i=1;i<=n;i++)
                        
if(dp[j+1][k+p[i]-d[i]]<dp[j][k]+p[i]+d[i]){
                            a
=j,b=k;
                            
if(!select(a,b,i)){
                                dp[j
+1][k+p[i]-d[i]]=dp[j][k]+p[i]+d[i];
                                path[j
+1][k+p[i]-d[i]]=i;
                            }

                        }

                }

        
for(i=origin,j=0;dp[m][i+j]<0 && dp[m][i-j]<0;j++);
        k
=dp[m][i+j]>dp[m][i-j]?i+j:i-j;
        printf(
"Jury #%d\n",ca++);
        printf(
"Best jury has value %d for prosecution and value %d for defence:\n",(dp[m][k]+k-origin)/2, (dp[m][k]-k+origin)/2);
        
for(i=1;i<=m;i++){
            result[i]
=path[m-i+1][k];
            k
-=p[result[i]]-d[result[i]];
        }

        qsort(result
+1,m,sizeof(int),cmp);
        
for(i=1;i<=m;i++)
            printf(
" %d",result[i]);
        printf(
"\n");
        printf(
"\n");
    }

    
return 0;
}


 

posted on 2009-06-23 17:08 極限定律 閱讀(4820) 評論(6)  編輯 收藏 引用 所屬分類: ACM/ICPC

評論

# re: POJ 1015 Jury Compromise 動態規劃 2009-09-09 14:03 boa

不知道為什么這種方法uva和tju上是wa啊?難道是這兩個網站不判special judge?  回復  更多評論   

# re: POJ 1015 Jury Compromise 動態規劃 2010-05-06 23:03 Cre_nws

麻煩問一下" if(dp[j+1][k+p[i]-d[i]]<dp[j][k]+p[i]+d[i])"當k=0時,p[i]-d[i]如果為負值,那么會不會產生運行時錯誤啊?!謝啦!  回復  更多評論   

# re: POJ 1015 Jury Compromise 動態規劃 2010-08-05 22:33 cxb

@Cre_nws
k應該不會取到0,因為取到0就意味著“辯控差”為負的最大,即已經到了j=m-1次循環,并且所有的陪審員都是p:0 s:20,此時k=0,并且整個循環已經結束了,這就是板主為何要將origin=m*20的原因之所在。有不對的地方,請指正~  回復  更多評論   

# re: POJ 1015 Jury Compromise 動態規劃 2010-09-03 14:58 tel

效率不是很高啊  回復  更多評論   

# re: POJ 1015 Jury Compromise 動態規劃 2010-10-14 19:59 songtianyi

效率已經不錯了  回復  更多評論   

# re: POJ 1015 Jury Compromise 動態規劃 2011-08-05 20:33 asdf

這個算法有后效性吧。就是在i的選取上。  回復  更多評論   

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

導航

統計

常用鏈接

留言簿(10)

隨筆分類

隨筆檔案

友情鏈接

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美亚洲综合网| 亚洲欧洲一区二区三区久久| 亚洲毛片在线看| 久久久www成人免费毛片麻豆| 亚洲男人影院| 欧美中在线观看| 亚洲欧美国产日韩中文字幕| 亚洲破处大片| 激情av一区二区| 亚洲国产经典视频| 亚洲国产高清一区| 亚洲人成7777| 亚洲美女视频| 亚洲午夜久久久| 先锋影音网一区二区| 久久精品国产96久久久香蕉| 午夜久久久久| 欧美成人亚洲成人| 亚洲精品免费在线播放| 亚洲国产精品第一区二区三区| 亚洲人成在线播放| 亚洲愉拍自拍另类高清精品| 久久精品色图| 欧美www视频在线观看| 欧美成人dvd在线视频| 欧美午夜精品理论片a级大开眼界| 欧美午夜欧美| 国产视频一区在线观看一区免费| 影视先锋久久| 一本色道久久综合| 久久久国产视频91| 久久影音先锋| 亚洲美女av电影| 午夜精品理论片| 久久天天躁夜夜躁狠狠躁2022 | 免费亚洲电影在线| 欧美肥婆在线| 亚洲私人影吧| 一本久久综合亚洲鲁鲁五月天| 小黄鸭精品aⅴ导航网站入口| 久久精品国产一区二区三区免费看 | 国产精品日韩欧美| 精品成人免费| 久久久国产精品亚洲一区 | 久久精品欧美日韩精品| 欧美精品一区二区三区四区| 国产精品爱久久久久久久| 国产色综合天天综合网| 亚洲福利国产| 午夜一区二区三视频在线观看 | 亚洲区中文字幕| 欧美亚洲视频在线观看| 欧美手机在线视频| 亚洲美女毛片| 美女图片一区二区| 在线亚洲观看| 欧美激情精品久久久久久大尺度| 极品少妇一区二区| 性做久久久久久| 亚洲免费黄色| 欧美高清日韩| 日韩视频一区二区三区在线播放免费观看| 久久精品国产一区二区电影| 亚洲精品三级| 欧美日韩色婷婷| 99精品视频一区二区三区| 噜噜噜噜噜久久久久久91| 一区二区三区四区五区精品| 国产精品视频免费| 一本久道综合久久精品| 欧美激情五月| 久久久女女女女999久久| 国内精品久久久久久影视8| 亚洲网站在线观看| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 亚洲国产视频一区| 久久久久久久综合色一本| 欧美一区二区性| 国内精品美女在线观看| 欧美伊人久久大香线蕉综合69| 99视频一区二区| 国产精品美女www爽爽爽视频| 99riav久久精品riav| 欧美成人亚洲成人日韩成人| 欧美成人中文字幕| 亚洲夜晚福利在线观看| 日韩亚洲欧美精品| 国产精品久久久久av| 亚洲综合日韩在线| 欧美永久精品| 国产一区二区电影在线观看| 玖玖玖国产精品| 老司机久久99久久精品播放免费| 亚洲美女视频在线观看| 日韩视频在线永久播放| 欧美性天天影院| 国产精品视频免费观看| 久久不射2019中文字幕| 久久成人在线| 亚洲国产另类 国产精品国产免费| 久久久噜噜噜久久久| 免费日韩av| 午夜一区二区三视频在线观看| 欧美诱惑福利视频| 亚洲高清视频在线观看| 日韩视频欧美视频| 国产在线观看一区| 欧美国产极速在线| 欧美日韩亚洲系列| 久久资源av| 欧美性猛交xxxx乱大交退制版| 久久免费国产精品1| 欧美精品免费看| 久久九九久精品国产免费直播| 欧美成人精品一区| 亚洲福利视频专区| 欧美黄免费看| 久久久久久9| 欧美午夜不卡视频| 亚洲成人在线网| 国产精品不卡在线| 欧美国产日韩在线| 狠狠色综合网| 欧美一区二区视频97| 亚洲欧美日韩成人高清在线一区| 欧美国产一区二区三区激情无套| 麻豆av一区二区三区久久| 国产伦精品一区二区三区四区免费| 欧美成人免费观看| 伊人成人网在线看| 久久精品视频免费播放| 欧美一区二区在线免费播放| 欧美性久久久| 正在播放日韩| 亚洲影院免费| 欧美日韩成人综合在线一区二区| 欧美电影免费观看大全| 在线看国产一区| 久热爱精品视频线路一| 麻豆国产精品va在线观看不卡| 国产日韩欧美三区| 亚洲伊人一本大道中文字幕| 亚洲免费一区二区| 国产精品欧美一区二区三区奶水| 在线亚洲一区二区| 欧美一级午夜免费电影| 国产精品永久免费在线| 午夜视频一区二区| 久久久久久穴| 亚洲国产日韩一级| 欧美日韩精品免费看 | 免费黄网站欧美| 好吊一区二区三区| 欧美中文在线免费| 欧美顶级艳妇交换群宴| 亚洲国产片色| 欧美四级剧情无删版影片| 亚洲午夜性刺激影院| 亚洲欧美成人| 久久爱www.| 亚洲国产精品电影| 欧美福利专区| 欧美一二三区在线观看| 99v久久综合狠狠综合久久| 欧美影院久久久| 亚洲大片一区二区三区| 亚洲视频中文| 久久av二区| 亚洲日韩欧美视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲国产精品国自产拍av秋霞| 一区二区三区视频在线看| 欧美二区不卡| 欧美一区二区三区的| 欧美在线看片a免费观看| 91久久久在线| 欧美jizzhd精品欧美巨大免费| 最新成人av网站| 亚洲欧美在线免费观看| 国产精品久久77777| 久久久久国产一区二区三区四区 | 91久久精品国产91性色| 欧美一进一出视频| 亚洲人成免费| 欧美日韩亚洲一区二区三区四区| 亚洲视频第一页| 欧美不卡视频| 亚洲激情在线| 欧美日产一区二区三区在线观看| 亚洲人体大胆视频| 蜜臀av性久久久久蜜臀aⅴ| 久久久亚洲综合| 在线精品观看| 欧美岛国在线观看| 99pao成人国产永久免费视频| 老司机精品导航| 亚洲一区二区毛片| 国产精品一国产精品k频道56| 欧美激情国产日韩精品一区18| 亚洲电影在线|