• <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>
            算法學(xué)社
            記錄難忘的征途
            posts - 141,comments - 220,trackbacks - 0
            A題

            分兩部分求,因?yàn)轭}目數(shù)只有15,所以可以2^15枚舉分組情況(分給L還是分給M)。

            接下來(lái)求對(duì)于同一size的M種顏色的氣球分配給N個(gè)題目的最小代價(jià)。
            排序之后,從大到小貪心的分配就可以了。

             1 #include<iostream>
             2 #include<string>
             3 #include<vector>
             4 using namespace std;
             5 const int inf = ~0u>>2;
             6 int make(vector<int> &flag, vector<int> &num){
             7     int n = num.size(), m = flag.size(),len = min(n,m);
             8     int suma  = 0, sumb = 0;
             9     for(int i = 0; i < n; i++) suma += num[i];
            10     for(int i = 0; i < m; i++) sumb += flag[i];
            11     if(suma > sumb) return inf;
            12     for(int i = 0; i < len; i++) suma -= min(num[i],flag[i]);
            13     return suma;
            14 }
            15 bool cmp(int a,int b){return a>b;}
            16 void op(vector<int> s){
            17     for(int i = 0; i < s.size(); i++)cout<<s[i]<<" ";cout<<endl; 
            18 }
            19 class ICPCBalloons{
            20     public :
            21     int minRepaintings(vector <int> bC, string bS, vector <int> num){
            22         int n= num.size();
            23         vector<int> M ,L;
            24         for(int i =0; i < bS.size(); i++if(bS[i] == 'L') L.push_back(bC[i]); else M.push_back(bC[i]);
            25         sort(M.begin(),M.end(),cmp);
            26         sort(L.begin(),L.end(),cmp);
            27         sort(num.begin(),num.end(),cmp);
            28         cout<<"M: "<<endl; op(M);
            29         cout<<"L: "<<endl; op(L);
            30         int ans = inf;
            31         for(int i = 0; i < (1<<n); i++) {
            32             vector<int> m,l;
            33             for(int j = 0; j < n; j++if(1<<& i) m.push_back(num[j]); else l.push_back(num[j]);
            34             int a = make(M,m);
            35             int b = make(L,l);
            36             //cout<<"m: "<<endl; op(m);
            37             //cout<<"l: "<<endl; op(l);
            38             ans = min(ans,a+b);
            39         }
            40         return ans == inf ? -1 : ans;
            41     }
            42 };

            B題

            博弈,給若干個(gè)有根樹(shù),節(jié)點(diǎn)數(shù)不超過(guò)50,兩個(gè)人輪流給某個(gè)未染色的點(diǎn)染色,這個(gè)點(diǎn)一旦被染色,它以及它的所有祖先就都被染色了。
            問(wèn)先手勝還是后手勝。

            樹(shù)形DP求SG值,復(fù)雜度O(n^3)。非常裸...
            更大規(guī)模的解法見(jiàn) 
            http://www.2333333.tk/182.html


            #include<string>
            #include
            <iostream>
            #include
            <vector>
            #include
            <cmath>
            using namespace std;
            const int N = 55;
            int P[N] ,n, dp[N];
            vector
            <int> G[N];
            inline 
            void setc(int p,int c){P[c] = p;
                G[p].push_back(c);
            }
            bool ispar(int s,int p){
                
            while(s!=-1){if(s==p)return 1; s=P[s];} return 0;
            }
            int dfs(int u) {
            //    cout<<"u; "<<u<<endl;
                int &ans = dp[u];
                
            if(ans != -1) {
                    
            //cout<<"back"<<endl;
                    return ans;
                }
                
            bool vis[101= {0};
                
            for(int i = 0; i < n; i++if(ispar(i,u)) {
                
            //    cout<<"i: "<<i<<endl;
                    int v = i, last = -1 ,sg = 0;
                    
            while(v != P[u]) {
                        
            for(int j = 0; j < G[v].size(); j ++if(G[v][j] != last) sg ^= dfs(G[v][j]);
                        last 
            = v;
                        v 
            = P[v];
                    }
                    vis[sg] 
            = 1;
                }
                
            for(int i = 0; i < 101; i++if(!vis[i]) {ans = i; break;}
                
            //cout<<"back"<<endl;
                return ans;
            }
            double dis(int x0,int y0,int x1,int y1){return sqrt(1.0*(x0-x1)*(x0-x1) + 1.0*(y0-y1)*(y0-y1));}
            class CirclesGame{
                
            public
                
            string whoCanWin(vector <int> x, vector <int> y, vector <int> r){
                    memset(P,
            -1,sizeof(P));
                    memset(dp,
            -1,sizeof(dp));
                    n 
            = x.size();
                    
            for(int i  =0 ; i < n; i++) {
                        
            int s = -1;
                        
            for(int j= 0; j < n; j++if(j != i && 1.0*(r[j] - r[i]) > dis(x[i],y[i],x[j],y[j])){
                            
            //cout<<j<<" "<<i<<" "<<r[j]-r[i]<<" "<<dis(x[i],y[i],x[j],y[j])<<endl;
                            if(s == -1 || r[j] < r[s]) s = j;
                        }
                        
            if(s != -1){     
                            setc(s,i);
                        }
                    }
                    
            //cout<<"endl"<<endl;
                
            //    for(int i = 0; i < n; i++) cout<<P[i]<<" ";cout<<endl;
                    int ans = 0;
                    
            for(int i = 0; i < n; i++if(-1 == P[i]) ans ^= dfs(i);
                    
            return ans ? "Alice" : "Bob";
                }
            };
            posted on 2012-11-21 16:02 西月弦 閱讀(522) 評(píng)論(3)  編輯 收藏 引用 所屬分類: 解題報(bào)告

            FeedBack:
            # re: topcoder srm 561 div1[未登錄](méi)
            2012-11-23 13:14 | kaka
            不是很明白,能不能詳細(xì)說(shuō)一下第二題的思路?  回復(fù)  更多評(píng)論
              
            # re: topcoder srm 561 div1
            2012-11-24 14:30 | 西月弦
            @kaka
            這個(gè)... 就是對(duì)于每個(gè)局面計(jì)算SG值。  回復(fù)  更多評(píng)論
              
            # re: topcoder srm 561 div1[未登錄](méi)
            2012-11-24 20:57 | kaka
            @西月弦
            看完sg函數(shù),終于明白代碼的含義了....  回復(fù)  更多評(píng)論
              
            国産精品久久久久久久| 人妻无码精品久久亚瑟影视| 亚洲国产精品人久久| 久久国产视屏| 无码日韩人妻精品久久蜜桃| 久久综合综合久久97色| 久久人人爽人人人人爽AV | 久久ZYZ资源站无码中文动漫| 久久婷婷综合中文字幕| 久久天天躁狠狠躁夜夜躁2014| 久久男人Av资源网站无码软件| 日本精品久久久久影院日本| 国产午夜精品理论片久久影视| 偷偷做久久久久网站| 国产激情久久久久影院小草| 久久久久人妻一区精品色| 久久久久免费视频| 久久亚洲精品视频| 久久夜色精品国产欧美乱| 人人狠狠综合久久亚洲高清| 国产精品免费久久| 国内精品久久九九国产精品| 日韩AV无码久久一区二区| 久久人人爽人人爽AV片| 亚洲精品高清国产一久久| 久久亚洲私人国产精品vA| 亚洲日本va午夜中文字幕久久| 九九热久久免费视频| 伊人色综合久久| 99久久99久久| 国产精品18久久久久久vr| 久久精品国产99久久久| 午夜人妻久久久久久久久| 亚洲综合日韩久久成人AV| 久久精品国产免费观看 | 国产精品美女久久久| 久久久精品2019免费观看| 日产精品久久久久久久| 久久国产精品成人影院| 91久久婷婷国产综合精品青草| 俺来也俺去啦久久综合网|