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

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>
            在线观看亚洲视频| 老司机免费视频一区二区三区 | 久久久久久久久久久久久9999| 中文精品视频一区二区在线观看| 夜夜爽av福利精品导航 | 欧美日韩成人网| 欧美激情一区二区在线| 欧美日韩久久不卡| 国产精品视频1区| 狠狠色丁香婷综合久久| 在线看欧美日韩| 亚洲毛片视频| 欧美亚洲免费电影| 久久久久久久欧美精品| 欧美成人精品在线观看| 亚洲日韩成人| 一区二区欧美日韩| 欧美一区二区黄| 欧美激情精品久久久久久黑人| 欧美午夜视频在线观看| 韩国精品一区二区三区| 日韩亚洲一区在线播放| 久久黄金**| 亚洲免费福利视频| 久久久青草婷婷精品综合日韩| 欧美成年人视频网站| 国产欧美午夜| aⅴ色国产欧美| 麻豆成人在线播放| 夜夜精品视频| 欧美大成色www永久网站婷| 国产精品久久久久婷婷| 亚洲激情黄色| 久久夜色精品一区| 亚洲一区三区视频在线观看| 免费在线欧美视频| 国产一区高清视频| 亚洲欧美精品伊人久久| 亚洲福利视频专区| 久久动漫亚洲| 国产女人aaa级久久久级| 99亚洲一区二区| 蜜桃伊人久久| 久久av在线| 国产三级欧美三级| 先锋资源久久| 亚洲视频久久| 欧美日本一道本| 亚洲欧洲综合| 免费亚洲一区二区| 久久成人人人人精品欧| 国产欧美一区二区精品忘忧草| 一区二区三区欧美在线观看| 欧美激情国产日韩精品一区18| 久久精品二区亚洲w码| 国产视频在线观看一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美激情影院| 亚洲毛片在线看| 欧美激情国产日韩| 最新国产成人在线观看| 久久久久久久97| 国产一区二区三区免费在线观看| 性久久久久久久久久久久| 亚洲无吗在线| 国产日产欧产精品推荐色| 久久国产夜色精品鲁鲁99| 亚洲视频1区| 国产精品专区h在线观看| 亚洲欧美综合v| 亚洲欧美精品在线| 国产日韩欧美在线观看| 久久视频一区二区| 久久综合久久久| 亚洲精品久久久久久下一站 | 亚洲精品中文字| 亚洲激情女人| 欧美视频在线观看免费| 午夜天堂精品久久久久| 午夜精品久久久久久久99热浪潮| 国产日韩精品电影| 男女视频一区二区| 欧美日韩免费观看一区二区三区| 亚洲欧美成人一区二区三区| 午夜精品久久久久久久99水蜜桃| 国产日韩综合| 欧美激情成人在线| 欧美亚一区二区| 久久国产主播| 欧美激情乱人伦| 性亚洲最疯狂xxxx高清| 久久久综合网| 亚洲免费中文| 麻豆成人91精品二区三区| 亚洲视频你懂的| 久久久精品免费视频| 在线一区二区三区四区| 欧美一区在线看| 中文成人激情娱乐网| 久久成人精品| 亚洲欧美综合v| 欧美国产日韩免费| 久久久噜噜噜久久| 国产精品a级| 亚洲二区在线视频| 国产日本亚洲高清| 日韩午夜激情| 亚洲精美视频| 欧美在线免费看| 亚洲欧美中文日韩在线| 欧美激情视频免费观看| 蜜桃精品久久久久久久免费影院| 国产精品chinese| 嫩模写真一区二区三区三州| 国产精品毛片一区二区三区 | 久久久久久尹人网香蕉| 欧美日韩ab| 亚洲第一精品福利| 欧美在线三区| 亚洲综合视频1区| 欧美国产亚洲精品久久久8v| 久久精品免费电影| 国产精品多人| 一本久道久久综合婷婷鲸鱼| 亚洲七七久久综合桃花剧情介绍| 午夜亚洲一区| 欧美一区二区三区四区视频 | 国产精品国产三级国产普通话三级 | 亚洲免费在线精品一区| 在线亚洲观看| 欧美日韩午夜剧场| 日韩视频免费观看| 亚洲美女性视频| 欧美激情精品久久久六区热门 | 欧美一区二区在线看| 国产精品国产一区二区| 一本色道婷婷久久欧美| 一区二区免费看| 欧美日韩日韩| 一本色道久久88综合亚洲精品ⅰ| 99天天综合性| 欧美性开放视频| 亚洲午夜视频在线| 欧美一区1区三区3区公司| 国产欧美日韩三区| 欧美一级一区| 美腿丝袜亚洲色图| 91久久夜色精品国产九色| 免费观看日韩av| 亚洲精品美女| 亚洲欧美日韩在线一区| 国产伦精品一区二区三区免费迷| 亚洲欧美三级在线| 亚洲精品久久| 欧美一区二区视频观看视频| 欧美午夜精品理论片a级按摩| av成人黄色| 欧美一区日本一区韩国一区| 国内精品久久久久久| 卡一卡二国产精品| 日韩视频欧美视频| 午夜国产一区| 在线观看日韩| 欧美视频专区一二在线观看| 国产精品久久久久影院色老大 | 欧美激情一区二区久久久| 亚洲精品在线免费| 国产欧美短视频| 免费成人av| 亚洲一区欧美激情| 欧美福利电影在线观看| 亚洲午夜女主播在线直播| 国产一区二区丝袜高跟鞋图片| 蜜臀久久99精品久久久画质超高清| 亚洲精品专区| 另类春色校园亚洲| 国产精品尤物| 久久一二三四| 久久免费午夜影院| 亚洲另类在线一区| 性感少妇一区| 一本色道久久综合| 韩国视频理论视频久久| 欧美日本中文| 久久久青草青青国产亚洲免观| 99国产精品久久久久久久久久| 久久九九免费| 亚洲永久精品大片| 日韩午夜av电影| 激情国产一区| 国产欧美高清| 国产精品美女999| 欧美久久视频| 免费不卡视频| 久久精品亚洲乱码伦伦中文| 亚洲伊人一本大道中文字幕| 亚洲精品小视频在线观看| 欧美国产亚洲视频| 老鸭窝91久久精品色噜噜导演| 欧美一区二区久久久|