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

TCCC-05-1000pt-

Posted on 2009-11-23 15:29 rikisand 閱讀(294) 評論(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>
            久久综合999| 久久综合久久综合这里只有精品| 欧美成人网在线| 亚洲电影激情视频网站| 卡通动漫国产精品| 免费欧美日韩| 一本一本久久| 亚洲免费在线视频| 狠狠久久婷婷| 欧美激情第二页| 欧美日韩一区二区三区四区五区| 亚洲网站在线| 欧美一区在线视频| 亚洲国产欧美日韩| 一本久道久久综合中文字幕| 国产精品欧美日韩| 老牛嫩草一区二区三区日本| 欧美激情1区2区| 午夜精品av| 久久综合99re88久久爱| 日韩视频第一页| 亚洲欧美日韩国产一区二区三区| 韩国女主播一区二区三区| 欧美激情一区二区| 国产噜噜噜噜噜久久久久久久久| 久久网站免费| 欧美午夜免费| 久久综合激情| 国产精品高潮呻吟视频| 久久尤物视频| 国产精品另类一区| 欧美激情第一页xxx| 国产精品久久久久三级| 男女精品网站| 国产日韩欧美制服另类| 亚洲国产精品悠悠久久琪琪| 欧美日韩中文精品| 欧美刺激性大交免费视频| 国产精品va在线| 亚洲国内自拍| 精品88久久久久88久久久| 亚洲最新视频在线| 亚洲欧洲精品一区二区精品久久久| 亚洲午夜精品17c| 亚洲激情另类| 久久久噜久噜久久综合| 亚洲免费婷婷| 欧美日韩精品久久| 亚洲福利在线看| 激情综合激情| 欧美一区二区高清在线观看| 亚洲视频中文| 欧美激情精品久久久| 美日韩精品视频免费看| 国产嫩草影院久久久久| 一本色道久久综合亚洲精品高清 | 国产精品色婷婷| 亚洲三级视频| 日韩五码在线| 欧美国产精品劲爆| 亚洲国产日韩在线| 亚洲国产精品福利| 免费中文日韩| 亚洲夫妻自拍| 亚洲精品影院| 欧美激情第二页| 亚洲激情综合| 夜夜嗨av一区二区三区四季av| 麻豆九一精品爱看视频在线观看免费| 久久精品一区二区三区不卡| 国产麻豆日韩| 久久国产精品99国产精| 久久久久国产精品www| 国产亚洲综合在线| 久久精品夜色噜噜亚洲a∨| 久久久噜噜噜久久久| 国产综合网站| 久久久综合网站| 亚洲福利在线视频| 99亚洲伊人久久精品影院红桃| 欧美激情一区二区三区在线| 亚洲激情在线视频| 亚洲欧美国产日韩中文字幕| 国产精品亚发布| 欧美中文在线视频| 欧美黄色网络| 亚洲欧美日韩区| 国产一区在线看| 欧美高清视频| 亚洲午夜精品17c| 久久综合中文| 一区二区日韩| 国产在线成人| 欧美大片网址| 亚洲一区日韩在线| 女同一区二区| 亚洲素人在线| 狠狠综合久久av一区二区老牛| 欧美夫妇交换俱乐部在线观看| 9色精品在线| 久久亚洲精品一区| 一区二区三区欧美视频| 国产午夜精品美女视频明星a级| 久久国产日韩| 在线一区二区日韩| 蜜桃av噜噜一区| 亚洲免费在线视频| 亚洲国产精品精华液2区45| 玖玖玖国产精品| 亚洲一区免费视频| 亚洲国产精品va| 欧美在线观看视频在线| 亚洲精品1234| 国产一区二区在线免费观看| 欧美激情久久久久久| 亚洲国产精品www| 亚洲主播在线播放| 亚洲国产1区| 国产人久久人人人人爽| 欧美经典一区二区三区| 欧美在线免费视频| 中文精品视频| 日韩视频不卡| 欧美激情视频一区二区三区在线播放 | 亚洲自拍偷拍色片视频| 伊甸园精品99久久久久久| 欧美性一区二区| 欧美激情按摩| 美女999久久久精品视频| 午夜精品美女自拍福到在线| 91久久精品一区二区三区| 久久女同互慰一区二区三区| 亚洲综合国产| 亚洲视频www| 一区二区三区四区国产精品| 亚洲国产精品成人综合| 国产主播一区二区| 国产欧美一区二区三区视频| 欧美日本亚洲韩国国产| 欧美jizzhd精品欧美喷水| 久久在线视频在线| 久久婷婷蜜乳一本欲蜜臀| 久久成人免费日本黄色| 欧美一区二区三区日韩| 亚洲欧美影院| 欧美一区二区免费观在线| 亚洲欧美久久久| 欧美夜福利tv在线| 午夜欧美大片免费观看| 香蕉久久久久久久av网站| 亚洲欧美日韩系列| 久久成人免费视频| 麻豆乱码国产一区二区三区| 久久天堂国产精品| 欧美国产精品人人做人人爱| 欧美电影免费观看| 欧美日韩一区免费| 国产精品综合av一区二区国产馆| 国产精品一区免费视频| 国产亚洲欧美另类一区二区三区| 国产欧美一区二区精品性| 含羞草久久爱69一区| 亚洲第一色中文字幕| 日韩亚洲视频| 亚洲欧美日韩在线高清直播| 欧美在线免费观看视频| 久久综合亚洲社区| 亚洲高清久久| 亚洲一二三四久久| 久久人人看视频| 欧美日韩精品一区视频 | 欧美国产高清| 欧美四级剧情无删版影片| 国产美女一区| 91久久精品国产91久久性色tv | 国内成+人亚洲| 亚洲精品老司机| 亚洲欧美中文日韩在线| 老巨人导航500精品| 亚洲欧洲视频在线| 亚洲欧美日韩第一区| 老鸭窝毛片一区二区三区 | 久久久水蜜桃| 欧美视频精品一区| 黄色日韩精品| 亚洲一区二区三区中文字幕| 欧美主播一区二区三区| 亚洲国产你懂的| 亚洲欧美怡红院| 欧美日韩国产区| 黄页网站一区| 亚洲女性喷水在线观看一区| 老司机aⅴ在线精品导航| 亚洲美女色禁图| 久久精品麻豆| 国产精品黄视频| 亚洲精选一区二区| 另类图片综合电影| 午夜精品婷婷| 国产精品你懂的在线欣赏|