青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

M.J的blog

algorithm,ACM-ICPC
隨筆 - 39, 文章 - 11, 評(píng)論 - 20, 引用 - 0
數(shù)據(jù)加載中……

多重背包問(wèn)題

今天看了下多重背包,理解的還不夠深入,不過(guò)因?yàn)槭?1背包過(guò)來(lái)的,所以接受起來(lái)很容易。
主要是運(yùn)用了二進(jìn)制的思想將一個(gè)數(shù)量為N很大的物品分為了logN個(gè)數(shù)量小的物品,而這logN個(gè)物品可以組成數(shù)量為0到N任意數(shù)量,所以這種策略是
成立的。
多重背包問(wèn)題有TOJ1034,TOJ1670.

TOJ1034 :
大意是有6種規(guī)格的石頭,編號(hào)從1到6,編號(hào)為 i 的石頭的價(jià)值為 i .現(xiàn)在給出各種石頭的數(shù)量,問(wèn)有沒(méi)有可能得到總價(jià)值的一半。
做法:    DP, 每種石頭價(jià)值為v[i],價(jià)值為 i ,數(shù)量為 num[i] ,通過(guò)多重背包看能不能恰好取得總價(jià)值的一半。
           一個(gè)優(yōu)化是總價(jià)值為奇數(shù)直接不用考慮,而在DP的時(shí)候設(shè)置一個(gè)標(biāo)記來(lái)記錄是否已經(jīng)取得總價(jià)值一半,如果取得則可以返回。
做法2:這種方法的前提是POJ  discuss里的一種做法,即給每個(gè)石頭的數(shù)量mod 8。證明是用抽屜原理證的,很復(fù)雜,我沒(méi)有看。但是這樣以來(lái),數(shù)量
            一下子大大減少,極大的提高了效率。
            我說(shuō)的做法2事實(shí)上是我的最初做法,即DFS,搜索,在搜索過(guò)程中注意剪枝,再加上數(shù)量取模的優(yōu)化,復(fù)雜度也不高。 

Code for 1034(Dividing):
import java.util.Scanner;

import java.util.
*;

import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;
public class Main {
    
public static int f[] = new int[20001*6];                                                // f[i]表示容量為 i 的背包最多能裝的物品的價(jià)值
    
public static int v[] = new int[7];
    
public static int num[] = new int[7];
    
public static int total,flag,key;                                                               //total為 6 種大理石的總價(jià)值 ,flag為標(biāo)記,一旦為1表示可以取得,可以返回了
    
public static void onezeropack(int cost,int weight) {                           //  01背包函數(shù),注意循環(huán)是從total 到 cost,不要弄反
             
int i;
             
for(i = total;i >= cost; i--) {
                        f[i] 
= Math.max(f[i],f[i-cost]+weight);
                       
if(f[i] == key) {                                                                 // 如果可以取得總價(jià)值一半,flag=1,返回
                                  flag 
= 1;
                                 
return ;
                        }
              }
    }
    
public static void finishpack(int cost,int weight) {                            
             
int i;
             
if(flag==1return ;
             
for(i = cost;i <= total; i++) {
                         f[i] 
= Math.max(f[i], f[i-cost]+weight);
                       
if(f[i] == key) {
                                flag 
= 1;
                               
return ;
                        }
              }
    }
    
public static void multipack(int cost,int weight,int amount) {
                
if(cost*amount >= total) {
                            finishpack(cost, weight);
                           
return ;
                 }
                
if(flag==1return ;
                
int k = 1;
                
while(k < amount) {                                                                                        // 該過(guò)程即為將一件物品拆分為1,2,4...2^k 件物品進(jìn)行01背包過(guò)程
                            onezeropack(k
*cost, k*weight);
                            amount 
-= k;
                            k 
*= 2;
                 }
                 onezeropack(cost
*amount, weight*amount);
    }
    
public static void main(String[] args){
                 Scanner 
in = new Scanner(System.in);
                
int i,j,cas = 1;
                
while(true) {
                            Arrays.fill(f,
0);
                            total 
= 0; flag = 0;
                           
for(i = 1;i <= 6; i++) {
                                       num[i] 
= in.nextInt();
                                       v[i] 
= i;
                                       total 
+= i*num[i];
                            }
                          
if(num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0&&num[5]==0&&num[6]==0)
                                     
break;
                          
if(total%2==1) flag = 0;
                          
else {
                                     key 
= total/2;
                                    
for(i = 1;i <= 6; i++
                                     multipack(i, i, num[i]);
                           }
                           System.
out.println("Collection #"+cas+":");
                          
if(flag==0) System.out.println("Can't be divided.");
                          
else System.out.println("Can be divided.");
                           System.
out.println();
                           cas
++;
                }
    }

}

TOJ 1670:
          大意是一臺(tái)取款機(jī)有N中貨幣,每種貨幣面值為 V[i] ,數(shù)量為 num[i] , 給出一個(gè)價(jià)值,為在這個(gè)價(jià)值之內(nèi)(包括這個(gè)價(jià)值)最大能取得多大。
分析:典型的多重背包,給出的價(jià)值即為背包容量,每種貨幣為一種物品,價(jià)值為v[i] , 數(shù)量為num[i],求能得到的最大價(jià)值。
          注釋就不加了,參考上面的程序

Code for 1670(Cash Mechine):

#include <cstdio>
#include 
<cstring>

int f[100002],v[12],num[12],cost[12];
int total,n;
int max(int a,int b){ return a>b?a:b;}

void OneZeroPack(int cost,int value){
          
int i,j;
          
for(i = total;i >= cost; i--)
                   f[i] 
= max(f[i],f[i-cost]+value);

}
void completePack(int cost,int weight){
          
int i;
          
for(i = cost;i <= total; i++)
                   f[i] 
= max(f[i],f[i-cost]+weight);
}
void multiPack(int cost,int weight,int amount){
          
if(cost*amount >= total){
                   completePack(cost,weight);
                  
return ;
           }
          
int k = 1;
          
while(k < amount){
                   OneZeroPack(k
*cost,k*weight);
                   amount 
-= k;
                   k
*=2;
           }
           OneZeroPack(cost
*amount,amount*weight);
}
int main(){
          
int i,j,k;
          
while(scanf("%d%d",&total,&n)!= EOF){
                   memset(f,
0,sizeof(f));
          
for(i = 1;i <= n; i++){
                   scanf(
"%d%d",&num[i],&cost[i]);
                   v[i] 
= cost[i];
           }
          
for(i = 1;i <= n; i++)
                   multiPack(cost[i],v[i],num[i]);
                   printf(
"%d\n",f[total]);    
           }
}



posted on 2010-07-07 20:18 M.J 閱讀(807) 評(píng)論(0)  編輯 收藏 引用


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区在线看| 欧美福利视频网站| 久久久青草婷婷精品综合日韩| 国产麻豆日韩| 久久九九久精品国产免费直播| 欧美v亚洲v综合ⅴ国产v| 91久久国产自产拍夜夜嗨| 欧美日韩精品一区二区| 亚洲一区二区三区四区中文| 久久亚洲美女| 亚洲裸体视频| 国产精品普通话对白| 久久久精品日韩欧美| 亚洲国产高潮在线观看| 亚洲欧美精品中文字幕在线| 好吊色欧美一区二区三区四区| 免费视频久久| 亚洲一区日本| 免费亚洲电影在线| 亚洲一区二区三区欧美| 精品福利免费观看| 欧美区在线播放| 欧美一级电影久久| 亚洲欧洲在线一区| 久久天天躁夜夜躁狠狠躁2022| 日韩视频永久免费| 韩国成人福利片在线播放| 欧美日韩一卡二卡| 久久久免费观看视频| 亚洲视频在线免费观看| 欧美aⅴ99久久黑人专区| 亚洲欧美一区二区三区久久| 亚洲激情电影在线| 国产综合在线看| 欧美日韩国产在线| 久久婷婷蜜乳一本欲蜜臀| 亚洲无限乱码一二三四麻| 亚洲第一主播视频| 久久久久久穴| 亚洲自拍三区| 一区二区免费看| 亚洲国语精品自产拍在线观看| 国产精品推荐精品| 欧美日韩一区二区三区| 久久久夜夜夜| 欧美在线播放| 亚洲女同在线| 亚洲天堂第二页| 亚洲精品欧美激情| 亚洲激情电影中文字幕| 欧美成人久久| 欧美va亚洲va香蕉在线| 久久久99爱| 欧美一级日韩一级| 亚洲少妇自拍| 一本大道久久精品懂色aⅴ| 亚洲黑丝在线| 亚洲国产高潮在线观看| 在线免费不卡视频| 红桃视频欧美| 韩国自拍一区| 精品69视频一区二区三区| 国产欧美一区二区三区久久 | 国产精品网站在线播放| 欧美手机在线| 欧美日韩一区二区三区免费| 欧美日本久久| 欧美日韩专区| 欧美日韩一本到| 欧美亚一区二区| 国产精品va| 国产精品视频免费观看| 国产精品一区在线观看| 国产精品综合不卡av| 国产精品性做久久久久久| 国产精品影片在线观看| 国产精品视频福利| 国产一区二区三区在线观看免费视频 | 亚洲精品久久在线| 亚洲精品视频在线观看网站| 91久久精品一区二区三区| 亚洲激情综合| 一本在线高清不卡dvd| 亚洲综合精品四区| 欧美在线欧美在线| 久久亚洲私人国产精品va| 免费不卡在线视频| 欧美日韩精品一二三区| 国产精品日韩在线一区| 国产一区导航| 亚洲国产裸拍裸体视频在线观看乱了中文| 在线观看亚洲| 亚洲精品久久久久中文字幕欢迎你 | 欧美黄色精品| 日韩一级黄色片| 欧美一区二区精品久久911| 久久久久久久久久久久久女国产乱| 久久综合亚州| 欧美日韩蜜桃| 国产亚洲精品高潮| 亚洲日本在线视频观看| 亚洲欧美经典视频| 女同性一区二区三区人了人一 | 国产精品一区亚洲| 亚洲高清一二三区| 亚洲视频中文字幕| 久久午夜影视| 99热免费精品在线观看| 欧美中文字幕视频在线观看| 男女视频一区二区| 国产欧美日韩精品a在线观看| 亚洲高清三级视频| 午夜伦欧美伦电影理论片| 欧美黄色成人网| 亚洲女人天堂av| 欧美精品成人91久久久久久久| 国产精品视频导航| 99国产精品久久| 久久久久女教师免费一区| 日韩视频在线一区| 久久久久久综合网天天| 国产精品成人一区| 亚洲精品三级| 久久夜精品va视频免费观看| 日韩亚洲精品视频| 男女精品网站| 国产综合视频| 校园春色综合网| 亚洲精品乱码久久久久久按摩观| 欧美在线观看一二区| 欧美亚一区二区| 99re热这里只有精品免费视频| 久久久www成人免费无遮挡大片| 亚洲精品影视在线观看| 免费成人av资源网| 精品91视频| 久久精品国产亚洲a| 亚洲香蕉视频| 欧美经典一区二区| 亚洲国内自拍| 欧美福利视频一区| 久久久久久久高潮| 国产一区日韩二区欧美三区| 亚洲制服av| 亚洲美女黄网| 欧美精品一线| 亚洲精品永久免费精品| 欧美福利视频网站| 久久久最新网址| 一区二区三区无毛| 久热国产精品| 久久精品电影| 在线成人av| 男人的天堂亚洲| 老司机精品久久| 在线观看欧美日韩| 欧美a级一区二区| 米奇777在线欧美播放| 在线观看一区视频| 欧美高清视频| 欧美激情按摩| 一区二区av在线| 一区二区三区高清不卡| 国产精品精品视频| 午夜精品久久久久久99热| 亚洲午夜电影在线观看| 国产美女精品一区二区三区| 久久精品1区| 久久精品1区| 亚洲国产成人精品久久久国产成人一区| 久久久久久一区二区| 久久久久国产免费免费| 亚洲日韩中文字幕在线播放| 亚洲国产日韩精品| 欧美三级电影网| 久久都是精品| 久久香蕉国产线看观看av| 亚洲肉体裸体xxxx137| 日韩视频精品| 国产日韩精品电影| 蜜桃久久精品乱码一区二区| 免费一级欧美片在线播放| 亚洲特黄一级片| 欧美一区二区视频网站| 在线观看av一区| 亚洲剧情一区二区| 国产精品一区在线播放| 女同一区二区| 欧美日韩综合视频网址| 久久精品国产99精品国产亚洲性色| 久久久久一区| 亚洲午夜免费视频| 久久精品三级| 中文亚洲免费| 久久成人免费视频| 亚洲剧情一区二区| 亚洲欧美美女| 夜夜嗨av一区二区三区网站四季av| 亚洲一区二区三区视频| 亚洲激情一区二区|