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

TCCC-05-1000pt-

Posted on 2009-11-23 15:29 rikisand 閱讀(289) 評論(0)  編輯 收藏 引用 所屬分類: TopcoderAlgorithm
Problem Statement

Just before a chess match between two teams, each team's coach secretly determines an ordering of his team's players. The first players in each team then get to play against each other, the second players in each team play against each other, etc. The team with the most wins will win the match.

You are the coach for one of the teams, and you have somehow managed to find out the order of the players in the other team. Based on that, you want to order your players so that your team's expected score is maximized to your advantage. The expected score of a single game can be calculated by the following formula (which is directly derived from how the international chess rating system works):

EA = 1 / (1 + 10 (RB - RA)/400)

EB = 1 / (1 + 10 (RA - RB)/400)

where RA and RB are the ratings of player A and B, and EA and EB are the expected scores for each player. For instance, if RA is 2432 and RB is 2611, the expected score for player A is 1 / (1 + 10179/400) = 0.263005239459. The expected score for a team is the sum of the expected scores for the players in that team.

To make things a bit more complicated, the players in a team must be ordered such that a player with rating x plays before all players with rating strictly less than x - lim, where lim is a given non-negative integer. For example, if lim is 100, a player with rating 2437 must play before a player with rating 2336 but not necessarily before a player with rating 2337.

Create a class ChessMatch containing the method bestExpectedScore which takes a vector <int> teamA, the ratings of your players (in no particular order); a vector <int> teamB, the ratings of your opponent's players in the order they will play; and an int lim, the limit determining how freely you can order your players. You can assume that your opponent's players will be ordered in accordance with lim. The method should return a double, your team's expected score if you order your players optimally.

Definition

Class:
ChessMatch

Method:
bestExpectedScore

Parameters:
vector <int>, vector <int>, int

Returns:
double

Method signature:
double bestExpectedScore(vector <int> teamA, vector <int> teamB, int lim)

(be sure your method is public)

 

要求最好的得分,要遍歷所有的排列方式顯然不可能。如果轉化問題為依次放置每個選手到每一個位置,那么只要求出剩下選手排列中使得得分最大的就可以了,可以想到dp方法的最有子問題定義。

用每一位記錄當前的選手分配情況,如果為0,則已經分配,如果為1,則還未分配。pos來記錄當前要分配的位置。對于每一個子集,考慮每一個為1的也就是未分配的選手使位于pos位置,然后check 是否滿足在他之后的球員(也就是剩下的是1的位)是否滿足條件的不等式,滿足則更新當前分配的最優成績。最終 2^N-1 的成績即為所求。

Code Snippet
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define two(X) (1<<(X))
#define contain(S,X) ((S&two(X))>0)
#define eps 1e-9
double p[20][20];
int N;
double memo[1<<20];
int lim;VI A;
bool check(int now,int pos){
    REP(i,N)if(now&two(i)){
        if(A[pos]+lim<A[i])return false;
    }
    return true;
}
double solve(int now,int pos){
    if(now==0) return 0;
    if(memo[now]>-eps)return memo[now];
    REP(i,N) if(contain(now,i)&&check(now^two(i),i)){
         double tmp=p[i][pos]+solve(now^two(i),pos+1);
         if(tmp>memo[now]+eps) memo[now]=tmp;
    }
    return memo[now];
}

class ChessMatch
{
        public:
        double bestExpectedScore(vector <int> tA, vector <int> tB, int _lim)
        {
            N=tA.size(); lim=_lim;A=tA;
            REP(i,N)REP(j,N)  p[i][j]=1.0/(1.0+pow(10.0,double(tB[j]-tA[i])/400.0));
            REP(i,1<<N)memo[i]=-1;
            return solve(two(N)-1,0);  
        }

 

上面的方法使用遞歸,下面是使用遞推的程序。即從子集出發最終到達2^n-1的思路。在這里把A隊伍先從大到小排序。在每一個子集記錄每一個未分配選手的得分和要分配的位置。

程序中思路為:依次從子集中選取一個選手作為第bits-1個選手,也就是說子集中剩下的元素要放在這個選手前面,由于選手從小到大遍歷,只需要遍歷到s[j]<=s[bits-1]+lim 為止,也就說滿足這個子集中最小的選手+lim >=選中的 即可,然后更新當前子集的得分

注釋中思路為: 依次從子集選取一個選手作為當前子集中的第一個元素,也就是整體的第n-bits個元素,這次從大到小遍歷,這樣只需要保證,位于子集第一個的元素+lim>=子集中最大的元素(s[0]),即可,然后更新當前子集得分

最終全集2^n-1的即為所求

Code Snippet
class ChessMatch
{
        public:
        double bestExpectedScore(vector <int> ta, vector <int> tb, int _lim)
        {
                int n=ta.size();a=ta;lim=_lim;N=n;
                sort(ta.begin(),ta.end(),greater<int>());int s[32],pos[32];
                REP(i,n)REP(j,n)p[i][j]=1./(1.+pow(10.,double(tb[j]-ta[i])/400.));
                REP(mask,1<<n){
                    int bits=0;
                    dp[mask]=0.;
                    if(!mask)continue;
                    REP(i,n) if(contain(mask,i)){
                        s[bits]=ta[i];pos[bits++]=i;
                    }
                    //for (int j = 0 ; j < bits  && s[j] + lim >= s[0]; j++){
                    //    if(dp[mask] < p[pos[j]][n-bits]+dp[mask^two(pos[j])])
                    //        dp[mask]= p[pos[j]][n-bits]+dp[mask^two(pos[j])] ;
                    
                    for (int j = bits-1; j >= 0 && s[j] <= s[bits-1] + lim; j--){
                    if(    dp[mask] <  p[pos[j]][bits-1] + dp[mask & ~(1 << pos[j])] )
                      dp[mask] = p[pos[j]][bits-1] + dp[mask & ~(1 << pos[j])];
                    }
                }
                return dp[two(n)-1];
        }
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩亚洲在线| 亚洲性视频h| 在线精品国精品国产尤物884a| 日韩视频免费在线| 欧美韩日视频| 久久久久国产精品麻豆ai换脸| 国产精品久久影院| 亚洲午夜精品久久久久久浪潮| 亚洲第一福利在线观看| 欧美亚洲网站| 国内一区二区三区| 久久艳片www.17c.com| 久久狠狠久久综合桃花| 激情自拍一区| 亚洲第一区中文99精品| 欧美一级一区| 亚洲午夜极品| 国产欧美日韩免费| 欧美在线视频在线播放完整版免费观看| 夜夜嗨一区二区三区| 欧美色图麻豆| 欧美在线免费一级片| 欧美在线视频全部完| 好看的日韩av电影| 亚洲第一在线视频| 欧美日韩一区综合| 久久精品2019中文字幕| 久久久久久网站| 亚洲精品久久久久久久久久久| 亚洲人成啪啪网站| 欧美性天天影院| 久久人人爽人人| 欧美国产精品va在线观看| 一本一本久久| 午夜精品亚洲| 亚洲精品欧美| 亚洲资源av| 1769国内精品视频在线播放| 最新国产成人在线观看| 国产精品久久999| 久久综合亚洲社区| 欧美激情综合网| 久久riav二区三区| 欧美国产亚洲视频| 欧美在线网站| 欧美精品性视频| 久久久久久一区二区| 欧美福利视频在线观看| 午夜精品久久久久久久久久久久久 | 一本一本a久久| 国产亚洲综合在线| 99视频+国产日韩欧美| 亚洲激情在线激情| 久久精品午夜| 久久久久久久久岛国免费| 欧美日韩专区| 噜噜噜噜噜久久久久久91 | 亚洲视频在线视频| 国产精品免费久久久久久| 性久久久久久| 欧美精品国产| 久久成人精品| 欧美日本中文字幕| 欧美高清自拍一区| 激情视频一区二区| 欧美在线free| 久久久99精品免费观看不卡| 性欧美videos另类喷潮| 9久re热视频在线精品| 久久人体大胆视频| 欧美大片18| 亚洲精品裸体| 欧美激情bt| 在线亚洲精品| 欧美资源在线| 韩国av一区二区三区四区| 欧美亚洲在线观看| 久久精品2019中文字幕| 国产精品每日更新| 性欧美激情精品| 亚洲国产精品久久久久| 亚洲精品美女在线观看| 亚洲乱码国产乱码精品精98午夜 | 免费成人黄色av| 依依成人综合视频| 欧美久久99| 99re6热在线精品视频播放速度| 亚洲一区二三| 伊人久久大香线蕉综合热线| 欧美高清在线视频观看不卡| 亚洲精品乱码久久久久久蜜桃91 | 亚洲精品国产精品国自产在线 | 欧美一区二区高清在线观看| 久久久久综合| 亚洲欧美精品伊人久久| 在线精品一区| 欧美网站大全在线观看| 欧美大片91| 久久久久久久999| 亚洲综合99| 一本色道久久综合亚洲91| 老司机免费视频久久| 欧美在线啊v| 欧美在线观看网址综合| 午夜视黄欧洲亚洲| 亚洲永久精品国产| 99av国产精品欲麻豆| 99伊人成综合| 99精品欧美一区二区蜜桃免费| 激情国产一区| 欧美一区二区精品| 亚洲第一精品影视| 亚洲国产精品t66y| 亚洲国产精品激情在线观看| 六月婷婷一区| 亚洲福利视频二区| 亚洲国内自拍| 日韩一区二区精品在线观看| 一区二区激情视频| 亚洲永久免费| 久久艳片www.17c.com| 欧美福利视频| 国产精品久久久一区麻豆最新章节| 欧美另类在线播放| 欧美日一区二区在线观看 | 裸体一区二区| 欧美日韩免费区域视频在线观看| 欧美区高清在线| 国模私拍视频一区| 亚洲精品一区在线观看| 久久精品国产一区二区三区免费看| 美女视频网站黄色亚洲| 亚洲精品视频在线| 久久久另类综合| 国产精品一区免费在线观看| 亚洲精品激情| 每日更新成人在线视频| 一本大道久久精品懂色aⅴ| 裸体素人女欧美日韩| 国产在线麻豆精品观看| 午夜电影亚洲| 99国产精品久久久| 欧美电影免费观看| 1000精品久久久久久久久 | 国产一区二区三区四区三区四| 亚洲高清自拍| 久久国产66| 狠狠做深爱婷婷久久综合一区| 亚洲天堂av在线免费| 亚洲第一页中文字幕| 久久狠狠亚洲综合| 亚洲中无吗在线| 国产精品二区三区四区| 亚洲欧美日本日韩| 欧美一区二区三区啪啪| 亚洲国产欧美一区二区三区久久 | 欧美伦理视频网站| 亚洲精品国产精品久久清纯直播| 欧美.com| 欧美色图五月天| 久久av一区| 久久久亚洲国产天美传媒修理工| 国产日韩欧美一区| 欧美大学生性色视频| 欧美日韩国产综合视频在线| 亚洲视频精品在线| 午夜精品在线观看| 亚洲电影在线| 日韩视频在线永久播放| 国产在线欧美| 亚洲欧洲一区| 狠狠久久亚洲欧美专区| 99热这里只有精品8| 亚洲国产高潮在线观看| 一本大道久久精品懂色aⅴ| 一区二区三区亚洲| 亚洲国产国产亚洲一二三| 国产亚洲欧洲一区高清在线观看 | 欧美自拍偷拍午夜视频| 欧美a级一区| 久久漫画官网| 国产欧美日韩视频一区二区三区 | 99在线热播精品免费| 亚洲成人在线| 欧美制服丝袜第一页| 午夜精彩国产免费不卡不顿大片| 久久久99久久精品女同性| 亚洲美女黄网| 欧美精品一区二区三区蜜臀| 欧美r片在线| 夜夜嗨av一区二区三区四季av| 久久精品道一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品另类一区| 亚洲欧美一区二区三区久久| 欧美一区二区日韩一区二区| 欧美性做爰毛片| 欧美影片第一页| 欧美成人午夜激情视频| 日韩视频一区二区三区在线播放|