• <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>
            posts - 43,  comments - 9,  trackbacks - 0
            uva4031 Integer Transmission (DP)
            題意:
            傳送一個長度在64之內(nèi)的01串,第i時刻發(fā)送出第i字節(jié)(i=0,1,...,L-1).對任意第i時刻發(fā)出的字節(jié),它有可能在i+1,i+2,...,i+d+1(d<=L)中的任一時刻到達(dá)接收端.當(dāng)同一時刻有多個字節(jié)同時到達(dá)時,這些字節(jié)可以任意排列.
            問接收端可能收到多少種不同串? 并求出二進(jìn)制最小的和最大的串.
            按位DP, 關(guān)鍵是確定前i位至多能有多少個0/1,至少必須有多少個0/1. 此題與windy's abc很相似, 但多了處變化.
            考慮 d=3, 原串為 1101011, 顯然第1個1永遠(yuǎn)不可能跑到第2個0右邊. 字符串的錯位,本質(zhì)上是某些1把它右邊d之內(nèi)的0擠到左邊了. 因此對1, 它實際能向右移多少位,取決于它右邊d之內(nèi)有多少個0.
            這樣預(yù)處理后按位DP即可.
            構(gòu)造最小/最大數(shù),只需盡量把1/0往低位扔就行了.

            代碼:

              1 #include <iostream>
              2 #include <cstdio>
              3 #include <cstdlib>
              4 #include <cstring>
              5 #include <algorithm>
              6 #include <cmath>
              7 using namespace std;
              8 
              9 typedef unsigned long long ull;
             10 
             11 int mi[2][130], mx[2][130];
             12 ull dp[65][65];
             13 int b[65];
             14 int N,D;
             15 ull K;
             16 int CAS;
             17 
             18 void init()
             19 {
             20     int i,j,k;
             21     ull t;
             22     memset(b,0,sizeof(b));
             23     for(t=K, i=N; t; i--){
             24         b[i] = t&1;
             25         t>>=1;
             26     }
             27     int c[2][130];
             28     memset(c,0,sizeof(c));
             29     for(i=1; i<=N; i++)
             30         c[b[i]][i]++;
             31     for(i=N; i>=1; i--)
             32         c[0][i] += c[0][i+1], c[1][i] += c[1][i+1];
             33     memset(mi, 0sizeof(mi));
             34     memset(mx, 0sizeof(mx));
             35     for(i=1; i<=N; i++){
             36         mx[b[i]][ min(N, i+c[b[i]^1][i+1]-c[b[i]^1][i+D+1]) ] ++;
             37     }
             38     for(i=N; i>=1; i--){
             39         mx[0][i] += mx[0][i+1];
             40         mx[1][i] += mx[1][i+1];
             41         mi[0][i] = max(0, N+1-i-mx[1][i]);
             42         mi[1][i] = max(0, N+1-i-mx[0][i]);
             43     }
             44 }
             45 
             46 ull dodp()
             47 {
             48     int i,j,k,p;
             49     ull ret = 0;
             50     memset(dp,0,sizeof(dp));
             51     for(i=0; i<=N; i++)
             52         dp[N][i] = 1;
             53     for(p=N; p>=1; p--){
             54         for(i=mi[0][p]; i<=mx[0][p]; i++){
             55             j=N+1-p-i;
             56             if(j<mi[1][p] || j>mx[1][p]) continue;
             57             if(dp[p][i]==0)continue;
             58             if(p==1){ ret += dp[p][i]; continue; }
             59             dp[p-1][i] += dp[p][i];
             60             dp[p-1][i+1+= dp[p][i];
             61         }
             62     }
             63     return ret;
             64 }
             65 
             66 void getans(ull &xx, ull &ii)
             67 {
             68     int i,j,k;
             69     int c0[2][65],c1[2][65];
             70     memset(c0,0,sizeof(c0));
             71     memset(c1,0,sizeof(c1));
             72     for(i=1; i<=N; i++){
             73         if(b[i]==0)
             74             c0[0][i]++, c1[0][min(N,i+D)]++;
             75         else
             76             c1[1][i]++, c0[1][min(N,i+D)]++;
             77     }
             78     //for(i=1; i<=N; i++
             79     xx = ii = 0;
             80     for(i=1; i<=N; i++){
             81         while(c0[0][i]--) ii = (ii<<1);
             82         while(c0[1][i]--) ii = (ii<<1)|1;
             83         
             84         while(c1[1][i]--) xx = (xx<<1)|1;
             85         while(c1[0][i]--) xx = (xx<<1);
             86     }
             87 }
             88 
             89 void solve()
             90 {
             91     int i,j,k;
             92     printf("Case %d: "++CAS);
             93     printf("%llu ", dodp());
             94     ull xx,ii;
             95     getans(xx, ii);
             96     printf("%llu %llu\n", ii, xx);
             97 }
             98 
             99 int main()
            100 {
            101     CAS = 0;
            102     while(scanf("%d",&N)!=EOF && N){
            103         scanf("%d %llu",&D,&K);
            104         init();
            105         solve();
            106     }
            107 }
            108 


            posted on 2009-07-16 19:28 wolf5x 閱讀(277) 評論(0)  編輯 收藏 引用 所屬分類: acm_icpc
            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            "Do not spend all your time on training or studying - this way you will probably become very exhausted and unwilling to compete more. Whatever you do - have fun. Once you find programming is no fun anymore – drop it. Play soccer, find a girlfriend, study something not related to programming, just live a life - programming contests are only programming contests, and nothing more. Don't let them become your life - for your life is much more interesting and colorful." -- Petr

            留言簿(3)

            隨筆分類(59)

            隨筆檔案(43)

            cows

            搜索

            •  

            最新評論

            評論排行榜

            91麻精品国产91久久久久 | 国产精品久久久99| 久久激情亚洲精品无码?V| 无夜精品久久久久久| 蜜臀久久99精品久久久久久小说| 色成年激情久久综合| 亚洲中文字幕无码久久精品1| 四虎国产精品免费久久久| 久久笫一福利免费导航 | 久久精品国产亚洲AV高清热 | 久久亚洲国产精品成人AV秋霞| 国产精品久久久久jk制服| 日批日出水久久亚洲精品tv| 欧美一区二区三区久久综合| 久久久无码精品午夜| 国产精品毛片久久久久久久| 久久久久国产精品嫩草影院| 91久久精品无码一区二区毛片| 久久久久人妻精品一区二区三区| 日韩美女18网站久久精品| 免费观看成人久久网免费观看| 午夜天堂av天堂久久久| 热99RE久久精品这里都是精品免费 | 要久久爱在线免费观看| 国产高潮久久免费观看| 久久久精品免费国产四虎| 亚洲综合伊人久久大杳蕉| 中文字幕无码久久人妻| 污污内射久久一区二区欧美日韩| 久久99精品国产麻豆宅宅| 久久精品夜夜夜夜夜久久| 久久国产色AV免费观看| 久久亚洲国产成人精品性色| 亚洲国产精品无码久久一线| 精品久久亚洲中文无码| 99精品国产综合久久久久五月天| 怡红院日本一道日本久久| 欧美精品一区二区精品久久| 亚洲午夜久久影院| 国产精品综合久久第一页| 国内精品久久久久久久久电影网|