<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ChenGen

    一切歸零,重新開始
    隨筆 - 13, 文章 - 10, 評(píng)論 - 21, 引用 - 0
    數(shù)據(jù)加載中……

    復(fù)習(xí)動(dòng)態(tài)規(guī)劃算法——01背包問(wèn)題

    ???今天復(fù)習(xí)了動(dòng)態(tài)規(guī)劃算法。01背包問(wèn)題是一個(gè)典型的動(dòng)態(tài)規(guī)劃問(wèn)題。算法的證明過(guò)程比較復(fù)雜,但是計(jì)算過(guò)程并不難理解。
    ???
    ???假設(shè)有這樣的序列 n=3 M=6 (物體數(shù)量為3,背包能背的重量為6)
    ???wi???2???3???4?(物體重量)
    ???pi????1???2???5 (物體的價(jià)值)

    ???初始化:Si={(P)}(待完成)

    代碼:

    #include? " stdio.h "
    #include?
    " stdlib.h "
    #define?MAXSIZE?
    1000

    void ?DKNAP( int ? * , int ? * , int , int );
    void ?PARTS( int ? * , int ? * , int ? * , int ? * ,? int , int );

    void ?main( void )
    {
    ????
    int ?i,j,n, * w, * p,M;
    ????
    if (freopen( " input.txt " , " r " ,stdin) == NULL) {
    ????????printf(
    " can't?open?file?'input.txt'\n " );
    ????????exit(
    - 1 );
    ????}

    ????scanf(
    " %d " , & n);
    ????scanf(
    " %d " , & M);
    ????w
    = ( int ? * )malloc(sizeof( int ) * n);
    ????p
    = ( int ? * )malloc(sizeof( int ) * n);
    ????
    for (i = 0 ;i < n;i ++ )
    ????????scanf(
    " %d " , & w[i]);
    ????
    for (i = 0 ;i < n;i ++ )
    ????????scanf(
    " %d " , & p[i]);
    ????DKNAP(w,p,n,M);
    }


    void ?DKNAP( int ? * w, int ? * p, int ?n, int ?M)
    {
    ????
    int ? * f,l,h,k,next,u,i,j,pp,ww,m;
    ????
    int ?P[MAXSIZE],W[MAXSIZE];
    ????f
    = ( int ? * )malloc(sizeof( int ) * (n + 1 ));
    ????P[
    0 ] = 0 ;
    ????W[
    0 ] = 0 ;
    ????f[
    0 ] = next = 1 ;
    ????l
    = h = 0 ;
    ????
    for (i = 0 ;i < n;i ++ ) {
    ????????k
    = l;
    ????????j
    = h;
    ????????
    while (W[j] + w[i] > M)?j -- ;
    ????????u
    = j;
    ????????
    for (j = l;j <= u;j ++ ) {
    ????????????ww
    = W[j] + w[i];
    ????????????pp
    = P[j] + p[i];
    ????????????
    while (k <= h? && ?W[k] < ww) {
    ????????????????W[next]
    = W[k];
    ????????????????P[next]
    = P[k];
    ????????????????next
    ++ ;
    ????????????????k
    ++ ;
    ????????????}

    ????????????
    if (k <= h? && ?W[k] == ww) {
    ????????????????pp
    = pp > P[k] ? pp:P[k];
    ????????????????k
    ++ ;
    ????????????}

    ????????????
    if (pp > P[next - 1 ]) {
    ????????????????P[next]
    = pp;
    ????????????????W[next]
    = ww;
    ????????????????next
    ++ ;
    ????????????}

    ????????????
    while (k <= h? && ?P[k] < P[next - 1 ]?)?k ++ ;
    ????????}

    ????????
    while (k <= h) {
    ????????????P[next]
    = P[k];
    ????????????W[next]
    = W[k];
    ????????????next
    ++ ;
    ????????????k
    ++ ;
    ????????}

    ????????f[i
    + 1 ] = next;
    ????????l
    = h + 1 ;
    ????????h
    = next - 1 ;

    ????}

    ????m
    = W[next - 1 ];
    ????printf(
    " \np?max?is?%d?\n " ,P[next - 1 ]);
    ????PARTS(W,w,p,f,n
    - 1 ,m);
    }


    void ?PARTS( int ? * W, int ? * w, int ? * p, int ? * f, int ?i, int ?m)
    {
    ????
    int ?flag,j,k;
    ????
    while (m > 0 ? && ?i > 0 ) {
    ????????flag
    = 0 ;
    ????????
    for (j = f[i - 1 ];j < f[i];j ++ )
    ????????????
    if (W[j] == m) {
    ????????????????flag
    = 1 ;
    ????????????????
    break ;
    ????????????}

    ????????
    if (flag == 0 ) {
    ????????????printf(
    " %d\n " ,i);
    ????????????m
    -= w[i];
    ????????}

    ????????i
    -- ;
    ????}

    ????
    if (m > 0 )?printf( " %d\n " ,i);
    }


    

    posted on 2006-09-28 12:52 ChenGen 閱讀(9911) 評(píng)論(3)  編輯  收藏 所屬分類: 數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)

    評(píng)論

    # re: 復(fù)習(xí)動(dòng)態(tài)規(guī)劃算法——01背包問(wèn)題  回復(fù)  更多評(píng)論   

    你根本是帖程序嘛……
    都沒(méi)有說(shuō)說(shuō)過(guò)程~
    2007-08-09 14:43 | 郁悶……

    # re: 復(fù)習(xí)動(dòng)態(tài)規(guī)劃算法——01背包問(wèn)題[未登錄](méi)  回復(fù)  更多評(píng)論   

    大哥不要貼程序啊
    2008-03-31 11:58 | dd

    # re: 復(fù)習(xí)動(dòng)態(tài)規(guī)劃算法——01背包問(wèn)題[未登錄](méi)  回復(fù)  更多評(píng)論   

    看不懂……一句注釋也沒(méi)有
    int * f,l,h,k,next,u,i,j,pp,ww,m;
    這么多又這么沒(méi)有意義的變量……
    看到就暈了……
    2008-04-20 11:52 | vivi
    主站蜘蛛池模板: 999在线视频精品免费播放观看| 久久综合日韩亚洲精品色| 24小时日本韩国高清免费| 国产区在线免费观看| 亚洲av无码专区国产不乱码| 日本免费A级毛一片| 亚洲人成网站免费播放| 18亚洲男同志videos网站| 中文字幕第13亚洲另类| 国产成人3p视频免费观看| 免免费国产AAAAA片| 一级毛片免费视频| 中文字幕成人免费高清在线| 丰满妇女做a级毛片免费观看| 亚洲色大成网站www| 亚洲人成77777在线播放网站不卡| 亚洲国产成人久久精品影视| 亚洲性日韩精品一区二区三区| 免费观看男人免费桶女人视频| 中文免费观看视频网站| 性xxxxx大片免费视频| 波霸在线精品视频免费观看| 阿v免费在线观看| 欧美激情综合亚洲一二区| 精品亚洲456在线播放| 亚洲国产成人精品激情| 亚洲最大在线视频| 亚洲综合亚洲国产尤物| 亚洲精品视频在线| 亚洲视频国产视频| 亚洲视频一区在线观看| 亚洲第一精品在线视频| 亚洲av无码无在线观看红杏| 亚洲AV无码乱码国产麻豆穿越| 亚洲国产精华液网站w| 亚洲AV日韩AV高潮无码专区| 亚洲av片劲爆在线观看| 亚洲AV无码精品色午夜果冻不卡| 亚洲国产AV无码专区亚洲AV | 亚洲国产精品无码观看久久| 亚洲AV无码精品蜜桃|