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

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            pku 1276 價值等于重量的多重背包

            Posted on 2010-08-03 10:50 Onway 閱讀(457) 評論(0)  編輯 收藏 引用 所屬分類: 傷不起的ACM

            pku 1276 價值等于重量的多重背包

            題意:
            取款機里有多種不同面值的鈔票,各種面值的鈔票的張數也不同,給出取款值CASH,問最多能拿出多少錢。

            思路:
            將鈔票看成是價值等于重量的物品,取款值為背包容量,那么這個題就是一個典型的多重背包。
            從數據規模考慮,直接變為0-1背包求解,O(CASH*NK*N)的時間肯定超時。參考《背包九講》中的用二進制壓縮

            物品可以將時間優化為O(CASH*N*logNK),這樣可以變成物品個數不超過100個的0-1背包。
            然后便是0-1背包的求解了。

            失誤:
            由于第一次學多重背包,看到二進制壓縮物品時,當時以為看懂了,提交后錯了N多次,才發現壓縮時的最后一

            項系數搞錯了。然后處理不好,又出現負數的情況,導致一直RE。修補壓縮物品部分,感覺又長又臭,遂通過研

            究一番將物品壓縮部分縮小到11行。

             1#include <iostream>
             2#include <math.h>
             3using namespace std;
             4const int MAX=100005;
             5int w[150],dp[MAX+1];
             6struct deno
             7{
             8    int cnt;
             9    int num;
            10}
            data[12];
            11int main()
            12{
            13    int n,m;
            14    while(scanf("%d",&n)!=EOF)
            15    {
            16        scanf("%d",&m);
            17        int i,j,k=1,tmp;
            18        for(i=1;i<=m;++i)
            19            scanf("%d%d",&data[i].cnt,&data[i].num);
            20
            21        memset(dp,0,sizeof(dp));
            22        memset(w,0,sizeof(w));
            23
            24        for(i=1;i<=m;++i)
            25        {
            26            j=0;
            27            while(data[i].cnt+1>=pow(2.0,j+1))
            28            {
            29                tmp=pow(2.0,j++);
            30                w[k++]=tmp*data[i].num;
            31            }

            32            tmp=data[i].cnt+1-pow(2.0,j);
            33            if(tmp)
            34                w[k++]=tmp*data[i].num;
            35        }

            36
            37        for(i=1,--k;i<=k;++i)
            38            for(j=MAX;j>=w[i];--j)
            39                dp[j]=dp[j]>dp[j-w[i]]+w[i]?dp[j]:dp[j-w[i]]+w[i];
            40
            41        printf("%d\n",dp[n]);
            42    }

            43    return 0;
            44}

            45
            46
            99久久精品国产一区二区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 思思久久99热免费精品6| 亚洲国产天堂久久久久久| 亚洲αv久久久噜噜噜噜噜| 国产成人精品久久免费动漫| 亚洲综合精品香蕉久久网97 | AV无码久久久久不卡蜜桃| 久久久久AV综合网成人| 久久精品国产亚洲一区二区三区 | 国产91色综合久久免费分享| 亚洲国产成人精品女人久久久 | 久久午夜伦鲁片免费无码| 99久久99久久精品国产片| 久久久国产打桩机| 久久se精品一区精品二区国产| 久久精品亚洲AV久久久无码| 久久最新精品国产| 熟妇人妻久久中文字幕| 亚洲人成网站999久久久综合| 99久久人妻无码精品系列蜜桃| 久久频这里精品99香蕉久| 久久99精品久久久久久噜噜| 国产精品久久久久jk制服| 久久久久久久久久久| 亚洲精品乱码久久久久久蜜桃| 欧美一区二区精品久久| 99久久99这里只有免费的精品| 亚洲狠狠婷婷综合久久久久| 亚洲国产婷婷香蕉久久久久久| 91精品国产综合久久香蕉 | 久久亚洲私人国产精品vA| 久久亚洲熟女cc98cm| 久久99热这里只频精品6| 无码人妻少妇久久中文字幕| 久久99精品九九九久久婷婷| 国产精品99久久久久久猫咪| 国产精品日韩深夜福利久久| 久久精品女人天堂AV麻| 久久久久无码精品| 久久精品国产男包|