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

            poj1276

            Cash Machine

            Time Limit: 1000MS Memory Limit: 10000K
            Total Submissions: 18125 Accepted: 6307

            Description

            A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill denominations, say Dk, k=1,N, and for each denomination Dk the machine has a supply of nk bills. For example,

            N=3, n1=10, D1=100, n2=4, D2=50, n3=5, D3=10

            means the machine has a supply of 10 bills of @100 each, 4 bills of @50 each, and 5 bills of @10 each.

            Call cash the requested amount of cash the machine should deliver and write a program that computes the maximum amount of cash less than or equal to cash that can be effectively delivered according to the available bill supply of the machine.

            Notes:
            @ is the symbol of the currency delivered by the machine. For instance, @ may stand for dollar, euro, pound etc.

            Input

            The program input is from standard input. Each data set in the input stands for a particular transaction and has the format:

            cash N n1 D1 n2 D2 ... nN DN

            where 0 <= cash <= 100000 is the amount of cash requested, 0 <=N <= 10 is the number of bill denominations and 0 <= nk <= 1000 is the number of available bills for the Dk denomination, 1 <= Dk <= 1000, k=1,N. White spaces can occur freely between the numbers in the input. The input data are correct.

            Output

            For each set of data the program prints the result to the standard output on a separate line as shown in the examples below.

            Sample Input

            735 3  4 125  6 5  3 350
            633 4  500 30  6 100  1 5  0 1
            735 0
            0 3  10 100  10 50  10 10

            Sample Output

            735
            630
            0
            0

            Hint

            The first data set designates a transaction where the amount of cash requested is @735. The machine contains 3 bill denominations: 4 bills of @125, 6 bills of @5, and 3 bills of @350. The machine can deliver the exact amount of requested cash.

            In the second case the bill supply of the machine does not fit the exact amount of cash requested. The maximum cash that can be delivered is @630. Notice that there can be several possibilities to combine the bills in the machine for matching the delivered cash.

            In the third case the machine is empty and no cash is delivered. In the fourth case the amount of cash requested is @0 and, therefore, the machine delivers no cash.



            這個題描述不好,搞得我很亂,就是有一個cash大小的背包,有n中物品,每種物品有nk個,每個費(fèi)用dk,問包里最多能裝多少,

            這是個多重背包,但是物品數(shù)特別多,有10*1000個最多,

            剛開始沒注意,tle了,然后想到要用背包九講中講的二進(jìn)制拆分的思想

            把每種物品分成1*w[i],2*w[i],4*w[i],……,2^k *w[i],(num[i]-2^(k+1)+1) *w[i] 這樣物品數(shù)就大大降低了,物品數(shù)變成了log(num)

            因?yàn)槊總€數(shù)都可以用多個2的幾次方組成,

            還有肯能的優(yōu)化是有的物品費(fèi)用超過了背包體積,直接舍去就可以了

             1#include<stdio.h>
             2#include<string.h>
             3#include<math.h>
             4#define MAX 10000
             5int v,n,w[MAX],num[20];
             6int f[100100],ww;
             7int i,j,k;
             8int tot,t;
             9int max(int a,int b)
            10{
            11    if (a>b) return a;
            12    else return b;
            13}

            14int main()
            15{
            16    while (scanf("%d%d",&v,&n)!=EOF)
            17    {
            18        tot=0;
            19        for (i=1; i<=n ; i++ )
            20        {
            21            scanf("%d%d",&num[i],&ww);
            22            if (num[i]!=0)
            23            {
            24                tot++;
            25                w[tot]=ww;
            26                num[i]--;
            27            }

            28            t=2;
            29            while (num[i]>=t)
            30            {
            31                num[i]-=t;
            32                tot++;
            33                w[tot]=t*ww;
            34                t=t*2;
            35            }

            36            if (num[i]>0)
            37            {
            38                tot++;
            39                w[tot]=num[i]*ww;
            40            }

            41        }

            42        memset(f,0,sizeof(f));
            43        for (i=1; i<=tot ; i++ )
            44            for (j=v; j>=w[i]; j-- )
            45            {
            46                f[j]=max(f[j],f[j-w[i]]+w[i]);
            47            }

            48        {
            49        }

            50        printf("%d\n",f[v]);
            51    }

            52    return 0;
            53}

            54


            posted on 2012-02-20 15:40 jh818012 閱讀(303) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當(dāng)于是 取余3的意思 因?yàn)?3 的 二進(jìn)制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
            • --王私江
            四虎国产精品成人免费久久| 精品久久香蕉国产线看观看亚洲| 精品国产乱码久久久久久1区2区 | 久久精品国产亚洲AV电影| 伊人精品久久久久7777| 亚洲中文久久精品无码| 99久久精品免费看国产一区二区三区 | 久久青青草原精品国产不卡| 久久久精品国产亚洲成人满18免费网站| 国产精品久久免费| 女人香蕉久久**毛片精品| 久久青青草原精品影院| 国产精品日韩欧美久久综合| 久久亚洲精品无码观看不卡| 一本色道久久综合狠狠躁| 国产精品久久影院| 久久播电影网| 久久WWW免费人成一看片| 99精品国产在热久久无毒不卡| 久久福利青草精品资源站免费| 精品久久久久久久中文字幕| 久久精品极品盛宴观看| 久久久久亚洲av无码专区| 国产高潮久久免费观看| 久久久久亚洲AV无码观看| 国产精品久久成人影院| 日韩欧美亚洲综合久久影院Ds| 色欲av伊人久久大香线蕉影院 | 久久精品国产只有精品2020| 久久精品三级视频| 久久综合给合久久狠狠狠97色69| 伊人热人久久中文字幕| 精品久久人人爽天天玩人人妻| 一级做a爱片久久毛片| 精品久久久久久国产| 一本大道加勒比久久综合| 久久午夜无码鲁丝片秋霞| 中文字幕亚洲综合久久| 久久综合给合久久狠狠狠97色69| 欧美精品福利视频一区二区三区久久久精品| 久久久久精品国产亚洲AV无码|