• <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 1742 多重背包轉(zhuǎn)完全背包

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

            pku 1742 多重背包轉(zhuǎn)完全背包

            我覺得這個題目跟pku 1276 cash machine和pku 1882 stamps都有點像。
            首先與1276 cash machine一樣,都是價值等于重量的多重背包,但1276可以用二進制壓縮物品轉(zhuǎn)0-1背包,這個題

            目當(dāng)然也可以,但會超時。所以discuss有一帖說教主忽悠了大家。
            與1882 stamps像,是因為是都是有張數(shù)限制,都是通過完全背包來做吧,個人覺得。只是張數(shù)限制稍有不同,一個

            是單個物品張數(shù),一個是所有物品張數(shù)。就因為這個,兩個題一個分在多重背包,一個分在了完全背包。轉(zhuǎn)完全背

            包后,時間就可以變?yōu)镺(N*M)了。

            我是看《背包九講》的二進制壓縮物品,然后直接拿這個題開刀。超時幾次后,上網(wǎng)找O(N*M)的算法途中,看到別

            人的一點提示,發(fā)現(xiàn)跟1882可以一樣做法。

            題意:
            有多種面值不同的硬幣,每種硬幣有多枚,給出一個數(shù)M,求出1到M之間,有多少個面值是可以通過這些硬幣組成的

            。

            思路:
            定義一個標(biāo)記數(shù)組sgn[MAX+1],將1到MAX之間的能組成的面值進行標(biāo)記。一個張數(shù)統(tǒng)計數(shù)組num[MAX+1],表示對于第

            i種硬幣,當(dāng)組成j面值時,使用的張數(shù)num[j]。
            這里可能有一個比較繞的問題:過早的使用完了第i種硬幣,會不會對第i+1種硬幣進行策略的時候造成影響呢?答

            案是會的,但正是需要這種影響。對第i+1種硬幣進行策略組合的時候,正是建立在前i種硬幣組成的基礎(chǔ)上。
            對已組合的面值j進行標(biāo)記,一是因為這是后面組成面值的基礎(chǔ),二能保證對后面的硬幣個數(shù)不會造成浪費。

             

             1#include <iostream>
             2using namespace std;
             3const int MAX=100000;
             4bool sgn[MAX+1];
             5int cnt[MAX+1];
             6int a[101],c[101];
             7int main()
             8{
             9    int n,m;
            10    while(scanf("%d%d",&n,&m)&&(n||m))
            11    {
            12        int i,j;
            13        for(i=1;i<=n;++i)    scanf("%d",&a[i]);
            14        for(i=1;i<=n;++i)    scanf("%d",&c[i]);
            15        memset(sgn,0,sizeof(sgn));
            16        sgn[0]=1;
            17
            18        for(i=1;i<=n;++i)
            19        {
            20            memset(cnt,0,sizeof(cnt));
            21            for(j=a[i];j<=MAX;++j)
            22                if(!sgn[j]&&sgn[j-a[i]]&&cnt[j-a[i]]<c[i])
            23                {
            24                    cnt[j]=cnt[j-a[i]]+1;
            25                    sgn[j]=1;
            26                }

            27        }

            28
            29        for(i=1,j=0;i<=m;++i)
            30            if(sgn[i])
            31                ++j;
            32
            33        printf("%d\n",j);
            34    }

            35    return 0;
            36}
            99久久er这里只有精品18| 99久久人妻无码精品系列蜜桃| 97超级碰碰碰碰久久久久| 好属妞这里只有精品久久| 天天爽天天爽天天片a久久网| 狠狠色伊人久久精品综合网| 婷婷久久五月天| 久久久久亚洲AV成人片| 精品久久久无码中文字幕| 2020国产成人久久精品| 久久国产成人精品麻豆| 亚洲国产美女精品久久久久∴| 亚洲国产精品久久久久婷婷软件| 亚洲欧洲精品成人久久曰影片| 久久精品国产亚洲AV香蕉| 久久综合久久伊人| 免费观看久久精彩视频| 综合久久国产九一剧情麻豆| 91久久精品视频| 色8久久人人97超碰香蕉987| 久久亚洲视频| 99热都是精品久久久久久| 久久久噜噜噜www成人网| 色妞色综合久久夜夜| 久久九九久精品国产免费直播| 国产亚洲婷婷香蕉久久精品| 一本久道久久综合狠狠爱| 久久午夜无码鲁丝片午夜精品| 四虎国产精品免费久久5151| 色综合久久无码五十路人妻| 国产欧美久久久精品影院| 久久久久久A亚洲欧洲AV冫| 夜夜亚洲天天久久| 成人午夜精品久久久久久久小说 | 精品久久久久久综合日本| 久久久亚洲AV波多野结衣| 精品久久久久久国产牛牛app| 久久精品视频免费| 久久er国产精品免费观看8| 国产精品99久久不卡| 久久影视国产亚洲|