• <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>

            oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

            // I am new in programming, welcome to my blog
            I am oyjpart(alpc12, 四城)
            posts - 224, comments - 694, trackbacks - 0, articles - 6

            SRM388

            Posted on 2008-01-16 03:09 oyjpart 閱讀(1251) 評(píng)論(3)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

            第一題,純暴搞的題,應(yīng)當(dāng)要寫的更快些。
            第二題。DP。題目稍些復(fù)雜。不用說了,我這等菜鳥,又是掛掉了。。sigh...

            依靠一個(gè)cha,顏色變黃。

            corret solution :

            const int N = 15;
            int dp[two(N)];
            int adj[N];
            int n;

            int go(int x) {

             int i, k, j;
             int &ret = dp[x];

             if(ret != -1) return ret;
             
             int all = 0;
             for(i = 0; i < n; ++i) {
              if(contains(x, i)) {
               all |= adj[i];
              }
             }
             if(all != two(n)-1) return ret = 0;

             ret = 1;

             int b[N];
             for(i = 0, k = 0; i < n; ++i) if(contains(x, i)) b[k++] = i;

             for(i = 0; i < two(k)-1; ++i) {
              int y = 0, z = 0;
              for(j = 0; j < k; ++j) {
               if(contains(i, j)) y |= two(b[j]);
               else z |= two(b[j]);
              }
              ret = Max(ret, go(y) + go(z));         // 注意 表面上貌似這一行被引用了2^n*2^k次,但實(shí)際上只有3^n (利用均攤分析的思想,相當(dāng)于分成了3個(gè)集合)
             }
             return ret;
            }

            class InformFriends
            {
            public:
             int maximumGroups(vector <string> f)
             {
              n = sz(f);
              memset(adj, 0, sizeof(adj));
              int i, j;
              for(i = 0; i < n; ++i) {
               adj[i] |= two(i);
               for(j = 0; j < n; ++j) {
                if(f[i][j] == 'Y')
                 adj[i] |= two(j);
               }
              }

              memset(dp, -1, sizeof(dp));
              return go(two(n)-1);
             } 


             賽后看到其他很多人的代碼,很有趣,各種各樣的都有
            比如通過 for(i = 0; i < (1<<n); (i+mask+1)&~mask) 來尋找mask補(bǔ)集的子集
            也有 for(i = ~mask&(1<<n); i > 0; i = (i-1)&mask) 的

            Feedback

            # re: SRM388   回復(fù)  更多評(píng)論   

            2008-01-17 22:23 by wywcgs
            那個(gè)“表面上貌似這一行被引用了2^n*2^k次”,實(shí)際上確實(shí)是這么多次吧,枚舉一下k,能發(fā)現(xiàn)和就是3^n

            # re: SRM388   回復(fù)  更多評(píng)論   

            2008-01-17 23:08 by oyjpart
            恩,我的意思是表面上看起來是2^n*2^k次而不知最終的復(fù)雜度,最好是通過均攤分析的思想來得知是3^n的復(fù)雜度。呵呵~~ :) 加油考研哦~

            # re: SRM388   回復(fù)  更多評(píng)論   

            2008-01-21 23:45 by wywcgs
            最好的方法就是生算,把這個(gè)式子從k = 0到n加起來求和,然后會(huì)發(fā)現(xiàn)就是3^n.....

            考完才看到你的祝福,thx :)
            伊人久久免费视频| 99久久99这里只有免费费精品| 奇米影视7777久久精品| 一本一本久久a久久精品综合麻豆| 国产午夜精品久久久久九九电影 | 久久综合九色综合欧美就去吻| 国产一区二区精品久久| 国产精品久久久久无码av| 久久久国产乱子伦精品作者 | 精品国产99久久久久久麻豆| 伊人久久大香线蕉AV一区二区| 2021国产精品午夜久久| 精品久久人人爽天天玩人人妻| 日本久久久久亚洲中字幕| 精品久久久久久无码专区不卡| 久久99精品久久久久久hb无码| 国产精品久久久久久久久| 国内精品免费久久影院| 亚洲欧美日韩久久精品| 日本欧美久久久久免费播放网| 国产Av激情久久无码天堂| 久久久久黑人强伦姧人妻| 久久亚洲AV成人无码软件| 99国产欧美精品久久久蜜芽| 国产激情久久久久影院| 亚洲精品99久久久久中文字幕| 人妻精品久久久久中文字幕69| 嫩草影院久久国产精品| 亚洲精品成人网久久久久久| 色欲综合久久中文字幕网| 夜夜亚洲天天久久| 97精品依人久久久大香线蕉97| 国产精品久久精品| 狠狠综合久久AV一区二区三区| 久久综合久久久| 婷婷伊人久久大香线蕉AV| 久久精品无码一区二区日韩AV | 久久久久亚洲AV成人网| 天天爽天天狠久久久综合麻豆| 久久久精品无码专区不卡| 国内精品久久久久影院免费|