背包问题九讲和源程序答案.docx

上传人:b****8 文档编号:11503460 上传时间:2023-03-02 格式:DOCX 页数:34 大小:31.63KB
下载 相关 举报
背包问题九讲和源程序答案.docx_第1页
第1页 / 共34页
背包问题九讲和源程序答案.docx_第2页
第2页 / 共34页
背包问题九讲和源程序答案.docx_第3页
第3页 / 共34页
背包问题九讲和源程序答案.docx_第4页
第4页 / 共34页
背包问题九讲和源程序答案.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

背包问题九讲和源程序答案.docx

《背包问题九讲和源程序答案.docx》由会员分享,可在线阅读,更多相关《背包问题九讲和源程序答案.docx(34页珍藏版)》请在冰豆网上搜索。

背包问题九讲和源程序答案.docx

背包问题九讲和源程序答案

Ŀ¼

µÚÒ»½²01±³°üÎÊÌâ

ÕâÊÇ×î»ù±¾µÄ±³°üÎÊÌ⣬ÿ¸öÎïÆ·×î¶àÖ»ÄÜ·ÅÒ»´Î¡£

µÚ¶þ½²ÍêÈ«±³°üÎÊÌâ

µÚ¶þ¸ö»ù±¾µÄ±³°üÎÊÌâÄ£ÐÍ£¬Ã¿ÖÖÎïÆ·¿ÉÒÔ·ÅÎÞÏÞ¶à´Î¡£

µÚÈý½²¶àÖر³°üÎÊÌâ

ÿÖÖÎïÆ·ÓÐÒ»¸ö¹Ì¶¨µÄ´ÎÊýÉÏÏÞ¡£

µÚËĽ²»ìºÏÈýÖÖ±³°üÎÊÌâ

½«Ç°ÃæÈýÖÖ¼òµ¥µÄÎÊÌâµþ¼Ó³É½Ï¸´ÔÓµÄÎÊÌâ¡£

µÚÎå½²¶þά·ÑÓõı³°üÎÊÌâ

Ò»¸ö¼òµ¥µÄ³£¼ûÀ©Õ¹¡£

µÚÁù½²·Ö×éµÄ±³°üÎÊÌâ

Ò»ÖÖÌâÄ¿ÀàÐÍ£¬Ò²ÊÇÒ»¸öÓÐÓõÄÄ£ÐÍ¡£ºóÁ½½ÚµÄ»ù´¡¡£

µÚÆß½²ÓÐÒÀÀµµÄ±³°üÎÊÌâ

ÁíÒ»ÖÖ¸øÎïÆ·µÄÑ¡È¡¼ÓÉÏÏÞÖƵķ½·¨¡£

µÚ°Ë½²·º»¯ÎïÆ·

ÎÒ×Ô¼º¹ØÓÚ±³°üÎÊÌâµÄ˼¿¼³É¹û£¬ÓÐÒ»µã³éÏó¡£

µÚ¾Å½²±³°üÎÊÌâÎÊ·¨µÄ±ä»¯

ÊÔͼ´¥ÀàÅÔͨ¡¢¾ÙÒ»·´Èý¡£

¸½£ºUSACOÖеı³°üÎÊÌâ

¸ø³öUSACOTrainingÉϿɹ©Á·Ï°µÄ±³°üÎÊÌâÁÐ±í£¬¼°¼òµ¥µÄ½â´ð¡£

P01:

01±³°üÎÊÌâ

퉀
ÓÐN¼þÎïÆ·ºÍÒ»¸öÈÝÁ¿ÎªVµÄ±³°ü¡£µÚi¼þÎïÆ·µÄ·ÑÓÃÊÇc[i]£¬¼ÛÖµÊÇw[i]¡£Çó½â½«ÄÄЩÎïÆ·×°Èë±³°ü¿Éʹ¼ÛÖµ×ܺÍ×î´ó¡£

»ù±¾Ë¼Â·

ÕâÊÇ×î»ù´¡µÄ±³°üÎÊÌ⣬ÌصãÊÇ£ºÃ¿ÖÖÎïÆ·½öÓÐÒ»¼þ£¬¿ÉÒÔÑ¡Ôñ·Å»ò²»·Å¡£

ÓÃ×ÓÎÊÌⶨÒå״̬£º¼´f[i][v]±íʾǰi¼þÎïÆ·Ç¡·ÅÈëÒ»¸öÈÝÁ¿ÎªvµÄ±³°ü¿ÉÒÔ»ñµÃµÄ×î´ó¼ÛÖµ¡£ÔòÆä״̬תÒÆ·½³Ì±ãÊÇ£º

f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}

Õâ¸ö·½³Ì·Ç³£ÖØÒª£¬»ù±¾ÉÏËùÓиú±³°üÏà¹ØµÄÎÊÌâµÄ·½³Ì¶¼ÊÇÓÉËüÑÜÉú³öÀ´µÄ¡£ËùÒÔÓбØÒª½«ËüÏêϸ½âÊÍһϣº¡°½«Ç°i¼þÎïÆ··ÅÈëÈÝÁ¿ÎªvµÄ±³°üÖС±Õâ¸ö×ÓÎÊÌ⣬ÈôÖ»¿¼ÂǵÚi¼þÎïÆ·µÄ²ßÂÔ£¨·Å»ò²»·Å£©£¬ÄÇô¾Í¿ÉÒÔת»¯ÎªÒ»¸öֻǣ³¶Ç°i-1¼þÎïÆ·µÄÎÊÌâ¡£Èç¹û²»·ÅµÚi¼þÎïÆ·£¬ÄÇôÎÊÌâ¾Íת»¯Îª¡°Ç°i-1¼þÎïÆ··ÅÈëÈÝÁ¿ÎªvµÄ±³°üÖС±£¬¼ÛֵΪf[i-1][v]£»Èç¹û·ÅµÚi¼þÎïÆ·£¬ÄÇôÎÊÌâ¾Íת»¯Îª¡°Ç°i-1¼þÎïÆ··ÅÈëʣϵÄÈÝÁ¿Îªv-c[i]µÄ±³°üÖС±£¬´ËʱÄÜ»ñµÃµÄ×î´ó¼ÛÖµ¾ÍÊÇf[i-1][v-c[i]]ÔÙ¼ÓÉÏͨ¹ý·ÅÈëµÚi¼þÎïÆ·»ñµÃµÄ¼ÛÖµw[i]¡£

ÓÅ»¯¿Õ¼ä¸´ÔÓ¶È

ÒÔÉÏ·½·¨µÄʱ¼äºÍ¿Õ¼ä¸´ÔӶȾùΪO(N*V)£¬ÆäÖÐʱ¼ä¸´ÔӶȻù±¾ÒѾ²»ÄÜÔÙÓÅ»¯ÁË£¬µ«¿Õ¼ä¸´ÔÓ¶ÈÈ´¿ÉÒÔÓÅ»¯µ½O(V)¡£

ÏÈ¿¼ÂÇÉÏÃæ½²µÄ»ù±¾Ë¼Â·ÈçºÎʵÏÖ£¬¿Ï¶¨ÊÇÓÐÒ»¸öÖ÷Ñ»·i=1..N£¬Ã¿´ÎËã³öÀ´¶þάÊý×éf[i][0..V]µÄËùÓÐÖµ¡£ÄÇô£¬Èç¹ûÖ»ÓÃÒ»¸öÊý×éf[0..V]£¬Äܲ»Äܱ£Ö¤µÚi´ÎÑ»·½áÊøºóf[v]ÖбíʾµÄ¾ÍÊÇÎÒÃǶ¨ÒåµÄ״̬f[i][v]ÄØ£¿f[i][v]ÊÇÓÉf[i-1][v]ºÍf[i-1][v-c[i]]Á½¸ö×ÓÎÊÌâµÝÍƶøÀ´£¬ÄÜ·ñ±£Ö¤ÔÚÍÆf[i][v]ʱ£¨Ò²¼´ÔÚµÚi´ÎÖ÷Ñ»·ÖÐÍÆf[v]ʱ£©Äܹ»µÃµ½f[i-1][v]ºÍf[i-1][v-c[i]]µÄÖµÄØ£¿ÊÂʵÉÏ£¬ÕâÒªÇóÔÚÿ´ÎÖ÷Ñ»·ÖÐÎÒÃÇÒÔv=V..0µÄ˳ÐòÍÆf[v]£¬ÕâÑù²ÅÄܱ£Ö¤ÍÆf[v]ʱf[v-c[i]]±£´æµÄÊÇ״̬f[i-1][v-c[i]]µÄÖµ¡£Î±´úÂëÈçÏ£º

fori=1..N

forv=V..0

f[v]=max{f[v],f[v-c[i]]+w[i]};

ÆäÖеÄf[v]=max{f[v],f[v-c[i]]}Ò»¾äÇ¡¾ÍÏ൱ÓÚÎÒÃǵÄתÒÆ·½³Ìf[i][v]=max{f[i-1][v],f[i-1][v-c[i]]}£¬ÒòΪÏÖÔÚµÄf[v-c[i]]¾ÍÏ൱ÓÚÔÀ´µÄf[i-1][v-c[i]]¡£Èç¹û½«vµÄÑ»·Ë³Ðò´ÓÉÏÃæµÄÄæÐò¸Ä³É˳ÐòµÄ»°£¬ÄÇôÔò³ÉÁËf[i][v]ÓÉf[i][v-c[i]]ÍÆÖª£¬Óë±¾ÌâÒâ²»·û£¬µ«ËüÈ´ÊÇÁíÒ»¸öÖØÒªµÄ±³°üÎÊÌâP02×î¼ò½ÝµÄ½â¾ö·½°¸£¬¹ÊѧϰֻÓÃһάÊý×é½â01±³°üÎÊÌâÊÇÊ®·Ö±ØÒªµÄ¡£

ÊÂʵÉÏ£¬Ê¹ÓÃһάÊý×é½â01±³°üµÄ³ÌÐòÔÚºóÃæ»á±»¶à´ÎÓõ½£¬ËùÒÔÕâÀï³éÏó³öÒ»¸ö´¦ÀíÒ»¼þ01±³°üÖеÄÎïÆ·¹ý³Ì£¬ÒÔºóµÄ´úÂëÖÐÖ±½Óµ÷Óò»¼Ó˵Ã÷¡£

¹ý³ÌZeroOnePack£¬±íʾ´¦ÀíÒ»¼þ01±³°üÖеÄÎïÆ·£¬Á½¸ö²ÎÊýcost¡¢weight·Ö±ð±íÃ÷Õâ¼þÎïÆ·µÄ·ÑÓúͼÛÖµ¡£

procedureZeroOnePack(cost,weight)

forv=V..cost

f[v]=max{f[v],f[v-cost]+weight}

×¢ÒâÕâ¸ö¹ý³ÌÀïµÄ´¦ÀíÓëÇ°Ãæ¸ø³öµÄα´úÂëÓÐËù²»Í¬¡£Ç°ÃæµÄʾÀý³ÌÐòд³Év=V..0ÊÇΪÁËÔÚ³ÌÐòÖÐÌåÏÖÿ¸ö״̬¶¼°´ÕÕ·½³ÌÇó½âÁË£¬±ÜÃâ²»±ØÒªµÄ˼ά¸´ÔӶȡ£¶øÕâÀï¼ÈÈ»ÒѾ³éÏó³É¿´×÷ºÚÏäµÄ¹ý³ÌÁË£¬¾Í¿ÉÒÔ¼ÓÈëÓÅ»¯¡£·ÑÓÃΪcostµÄÎïÆ·²»»áÓ°Ïì״̬f[0..cost-1]£¬ÕâÊÇÏÔÈ»µÄ¡£

ÓÐÁËÕâ¸ö¹ý³ÌÒÔºó£¬01±³°üÎÊÌâµÄα´úÂë¾Í¿ÉÒÔÕâÑùд£º

fori=1..N

ZeroOnePack(c[i],w[i]);

³õʼ»¯µÄϸ½ÚÎÊÌâ

ÎÒÃÇ¿´µ½µÄÇó×îÓŽâµÄ±³°üÎÊÌâÌâÄ¿ÖУ¬ÊÂʵÉÏÓÐÁ½ÖÖ²»Ì«ÏàͬµÄÎÊ·¨¡£ÓеÄÌâÄ¿ÒªÇó¡°Ç¡ºÃ×°Âú±³°ü¡±Ê±µÄ×îÓŽ⣬ÓеÄÌâÄ¿Ôò²¢Ã»ÓÐÒªÇó±ØÐë°Ñ±³°ü×°Âú¡£Ò»ÖÖÇø±ðÕâÁ½ÖÖÎÊ·¨µÄʵÏÖ·½·¨ÊÇÔÚ³õʼ»¯µÄʱºòÓÐËù²»Í¬¡£

Èç¹ûÊǵÚÒ»ÖÖÎÊ·¨£¬ÒªÇóÇ¡ºÃ×°Âú±³°ü£¬ÄÇôÔÚ³õʼ»¯Ê±³ýÁËf[0]Ϊ0ÆäËüf[1..V]¾ùÉèΪ-¡Þ£¬ÕâÑù¾Í¿ÉÒÔ±£Ö¤×îÖյõ½µÄf[N]ÊÇÒ»ÖÖÇ¡ºÃ×°Âú±³°üµÄ×îÓŽ⡣

Èç¹û²¢Ã»ÓÐÒªÇó±ØÐë°Ñ±³°ü×°Âú£¬¶øÊÇֻϣÍû¼Û¸ñ¾¡Á¿´ó£¬³õʼ»¯Ê±Ó¦¸Ã½«f[0..V]È«²¿ÉèΪ0¡£

ΪʲôÄØ£¿¿ÉÒÔÕâÑùÀí½â£º³õʼ»¯µÄfÊý×éÊÂʵÉϾÍÊÇÔÚûÓÐÈκÎÎïÆ·¿ÉÒÔ·ÅÈë±³°üʱµÄºÏ·¨×´Ì¬¡£Èç¹ûÒªÇó±³°üÇ¡ºÃ×°Âú£¬ÄÇô´ËʱֻÓÐÈÝÁ¿Îª0µÄ±³°ü¿ÉÄܱ»¼ÛֵΪ0µÄnothing¡°Ç¡ºÃ×°Âú¡±£¬ÆäËüÈÝÁ¿µÄ±³°ü¾ùûÓкϷ¨µÄ½â£¬ÊôÓÚ䶨ÒåµÄ״̬£¬ËüÃǵÄÖµ¾Í¶¼Ó¦¸ÃÊÇ-¡ÞÁË¡£Èç¹û±³°ü²¢·Ç±ØÐë±»×°Âú£¬ÄÇôÈκÎÈÝÁ¿µÄ±³°ü¶¼ÓÐÒ»¸öºÏ·¨½â¡°Ê²Ã´¶¼²»×°¡±£¬Õâ¸ö½âµÄ¼ÛֵΪ0£¬ËùÒÔ³õʼʱ״̬µÄÖµÒ²¾ÍÈ«²¿Îª0ÁË¡£

Õâ¸öС¼¼ÇÉÍêÈ«¿ÉÒÔÍƹ㵽ÆäËüÀàÐ͵ı³°üÎÊÌ⣬ºóÃæÒ²¾Í²»ÔÙ¶Ô½øÐÐ״̬תÒÆ֮ǰµÄ³õʼ»¯½øÐн²½â¡£

С½á

01±³°üÎÊÌâÊÇ×î»ù±¾µÄ±³°üÎÊÌ⣬Ëü°üº¬Á˱³°üÎÊÌâÖÐÉè¼Æ״̬¡¢·½³ÌµÄ×î»ù±¾Ë¼Ï룬ÁíÍ⣬±ðµÄÀàÐ͵ı³°üÎÊÌâÍùÍùÒ²¿ÉÒÔת»»³É01±³°üÎÊÌâÇó½â¡£¹ÊÒ»¶¨Òª×ÐϸÌå»áÉÏÃæ»ù±¾Ë¼Â·µÄµÃ³ö·½·¨£¬×´Ì¬×ªÒÆ·½³ÌµÄÒâÒ壬ÒÔ¼°×îºóÔõÑùÓÅ»¯µÄ¿Õ¼ä¸´ÔӶȡ£

Ê×Ò³

P02:

ÍêÈ«±³°üÎÊÌâ

퉀
ÓÐNÖÖÎïÆ·ºÍÒ»¸öÈÝÁ¿ÎªVµÄ±³°ü£¬Ã¿ÖÖÎïÆ·¶¼ÓÐÎÞÏÞ¼þ¿ÉÓᣵÚiÖÖÎïÆ·µÄ·ÑÓÃÊÇc[i]£¬¼ÛÖµÊÇw[i]¡£Çó½â½«ÄÄЩÎïÆ·×°Èë±³°ü¿ÉʹÕâЩÎïÆ·µÄ·ÑÓÃ×ܺͲ»³¬¹ý±³°üÈÝÁ¿£¬ÇÒ¼ÛÖµ×ܺÍ×î´ó¡£

»ù±¾Ë¼Â·

Õâ¸öÎÊÌâ·Ç³£ÀàËÆÓÚ01±³°üÎÊÌ⣬Ëù²»Í¬µÄÊÇÿÖÖÎïÆ·ÓÐÎÞÏÞ¼þ¡£Ò²¾ÍÊÇ´ÓÿÖÖÎïÆ·µÄ½Ç¶È¿¼ÂÇ£¬ÓëËüÏà¹ØµÄ²ßÂÔÒѲ¢·ÇÈ¡»ò²»È¡Á½ÖÖ£¬¶øÊÇÓÐÈ¡0¼þ¡¢È¡1¼þ¡¢È¡2¼þ¡¡µÈºÜ¶àÖÖ¡£Èç¹ûÈÔÈ»°´ÕÕ½â01±³°üʱµÄ˼·£¬Áîf[i][v]±íʾǰiÖÖÎïÆ·Ç¡·ÅÈëÒ»¸öÈÝÁ¿ÎªvµÄ±³°üµÄ×î´óȨֵ¡£ÈÔÈ»¿ÉÒÔ°´ÕÕÿÖÖÎïÆ·²»Í¬µÄ²ßÂÔд³ö״̬תÒÆ·½³Ì£¬ÏñÕâÑù£º

f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}

Õâ¸ú01±³°üÎÊÌâÒ»ÑùÓÐO(N*V)¸ö״̬ÐèÒªÇó½â£¬µ«Çó½âÿ¸ö״̬µÄʱ¼äÒѾ²»Êdz£ÊýÁË£¬Çó½â״̬f[i][v]µÄʱ¼äÊÇO(v/c[i])£¬×ܵĸ´ÔÓ¶ÈÊdz¬¹ýO(VN)µÄ¡£

½«01±³°üÎÊÌâµÄ»ù±¾Ë¼Â·¼ÓÒԸĽø£¬µÃµ½ÁËÕâÑùÒ»¸öÇåÎúµÄ·½·¨¡£Õâ˵Ã÷01±³°üÎÊÌâµÄ·½³ÌµÄÈ·ÊǺÜÖØÒª£¬¿ÉÒÔÍƼ°ÆäËüÀàÐ͵ı³°üÎÊÌâ¡£µ«ÎÒÃÇ»¹ÊÇÊÔͼ¸Ä½øÕâ¸ö¸´ÔӶȡ£

Ò»¸ö¼òµ¥ÓÐЧµÄÓÅ»¯

ÍêÈ«±³°üÎÊÌâÓÐÒ»¸öºÜ¼òµ¥ÓÐЧµÄÓÅ»¯£¬ÊÇÕâÑùµÄ£ºÈôÁ½¼þÎïÆ·i¡¢jÂú×ãc[i]<=c[j]ÇÒw[i]>=w[j]£¬Ôò½«ÎïÆ·jÈ¥µô£¬²»Óÿ¼ÂÇ¡£Õâ¸öÓÅ»¯µÄÕýÈ·ÐÔÏÔÈ»£ºÈκÎÇé¿ö϶¼¿É½«¼ÛֵС·ÑÓøߵÃj»»³ÉÎïÃÀ¼ÛÁ®µÄi£¬µÃµ½ÖÁÉÙ²»»á¸ü²îµÄ·½°¸¡£¶ÔÓÚËæ»úÉú³ÉµÄÊý¾Ý£¬Õâ¸ö·½·¨ÍùÍù»á´ó´ó¼õÉÙÎïÆ·µÄ¼þÊý£¬´Ó¶ø¼Ó¿ìËٶȡ£È»¶øÕâ¸ö²¢²»ÄܸÄÉÆ×Çé¿öµÄ¸´ÔӶȣ¬ÒòΪÓпÉÄÜÌرðÉè¼ÆµÄÊý¾Ý¿ÉÒÔÒ»¼þÎïƷҲȥ²»µô¡£

Õâ¸öÓÅ»¯¿ÉÒÔ¼òµ¥µÄO(N^2)µØʵÏÖ£¬Ò»°ã¶¼¿ÉÒÔ³ÐÊÜ¡£ÁíÍ⣬Õë¶Ô±³°üÎÊÌâ¶øÑÔ£¬±È½Ï²»´íµÄÒ»ÖÖ·½·¨ÊÇ£ºÊ×ÏȽ«·ÑÓôóÓÚVµÄÎïÆ·È¥µô£¬È»ºóʹÓÃÀàËƼÆÊýÅÅÐòµÄ×ö·¨£¬¼ÆËã³ö·ÑÓÃÏàͬµÄÎïÆ·ÖмÛÖµ×î¸ßµÄÊÇÄĸö£¬¿ÉÒÔO(V+N)µØÍê³ÉÕâ¸öÓÅ»¯¡£Õâ¸ö²»Ì«ÖØÒªµÄ¹ý³Ì¾Í²»¸ø³öα´úÂëÁË£¬Ï£ÍûÄãÄܶÀÁ¢Ë¼¿¼Ð´³öα´úÂë»ò³ÌÐò¡£

ת»¯Îª01±³°üÎÊÌâÇó½â

¼ÈÈ»01±³°üÎÊÌâÊÇ×î»ù±¾µÄ±³°üÎÊÌ⣬ÄÇôÎÒÃÇ¿ÉÒÔ¿¼ÂÇ°ÑÍêÈ«±³°üÎÊÌâת»¯Îª01±³°üÎÊÌâÀ´½â¡£×î¼òµ¥µÄÏë·¨ÊÇ£¬¿¼Âǵ½µÚiÖÖÎïÆ·×î¶àÑ¡V/c[i]¼þ£¬ÓÚÊÇ¿ÉÒ԰ѵÚiÖÖÎïƷת»¯ÎªV/c[i]¼þ·ÑÓü°¼ÛÖµ¾ù²»±äµÄÎïÆ·£¬È»ºóÇó½âÕâ¸ö01±³°üÎÊÌâ¡£ÕâÑùÍêȫûÓиĽø»ù±¾Ë¼Â·µÄʱ¼ä¸´ÔӶȣ¬µ«Õâ±Ï¾¹¸øÁËÎÒÃǽ«ÍêÈ«±³°üÎÊÌâת»¯Îª01±³°üÎÊÌâµÄ˼·£º½«Ò»ÖÖÎïÆ·²ð³É¶à¼þÎïÆ·¡£

¸ü¸ßЧµÄת»¯·½·¨ÊÇ£º°ÑµÚiÖÖÎïÆ·²ð³É·ÑÓÃΪc[i]*2^k¡¢¼ÛֵΪw[i]*2^kµÄÈô¸É¼þÎïÆ·£¬ÆäÖÐkÂú×ãc[i]*2^k<=V¡£ÕâÊǶþ½øÖƵÄ˼Ï룬ÒòΪ²»¹Ü×îÓŲßÂÔÑ¡¼¸¼þµÚiÖÖÎïÆ·£¬×Ü¿ÉÒÔ±íʾ³ÉÈô¸É¸ö2^k¼þÎïÆ·µÄºÍ¡£ÕâÑù°ÑÿÖÖÎïÆ·²ð³ÉO(log(V/c[i]))¼þÎïÆ·£¬ÊÇÒ»¸öºÜ´óµÄ¸Ä½ø¡£

µ«ÎÒÃÇÓиüÓŵÄO(VN)µÄËã·¨¡£

O(VN)µÄËã·¨

Õâ¸öË㷨ʹÓÃһάÊý×飬ÏÈ¿´Î±´úÂ룺

fori=1..N

forv=0..V

f[v]=max{f[v],f[v-cost]+weight}

Äã»á·¢ÏÖ£¬Õâ¸öα´úÂëÓëP01µÄα´úÂëÖ»ÓÐvµÄÑ»·´ÎÐò²»Í¬¶øÒÑ¡£ÎªÊ²Ã´ÕâÑùÒ»¸Ä¾Í¿ÉÐÐÄØ£¿Ê×ÏÈÏëÏëΪʲôP01ÖÐÒª°´ÕÕv=V..0µÄÄæÐòÀ´Ñ»·¡£ÕâÊÇÒòΪҪ±£Ö¤µÚi´ÎÑ»·ÖеÄ״̬f[i][v]ÊÇÓÉ״̬f[i-1][v-c[i]]µÝÍƶøÀ´¡£»»¾ä»°Ëµ£¬ÕâÕýÊÇΪÁ˱£Ö¤Ã¿¼þÎïƷֻѡһ´Î£¬±£Ö¤ÔÚ¿¼ÂÇ¡°Ñ¡ÈëµÚi¼þÎïÆ·¡±Õâ¼þ²ßÂÔʱ£¬ÒÀ¾ÝµÄÊÇÒ»¸ö¾øÎÞÒѾÑ¡ÈëµÚi¼þÎïÆ·µÄ×Ó½á¹ûf[i-1][v-c[i]]¡£¶øÏÖÔÚÍêÈ«±³°üµÄÌصãÇ¡ÊÇÿÖÖÎïÆ·¿ÉÑ¡ÎÞÏÞ¼þ£¬ËùÒÔÔÚ¿¼ÂÇ¡°¼ÓÑ¡Ò»¼þµÚiÖÖÎïÆ·¡±ÕâÖÖ²ßÂÔʱ£¬È´ÕýÐèÒªÒ»¸ö¿ÉÄÜÒÑÑ¡ÈëµÚiÖÖÎïÆ·µÄ×Ó½á¹ûf[i][v-c[i]]£¬ËùÒԾͿÉÒÔ²¢ÇÒ±ØÐë²ÉÓÃv=0..VµÄ˳ÐòÑ»·¡£Õâ¾ÍÊÇÕâ¸ö¼òµ¥µÄ³ÌÐòΪºÎ³ÉÁ¢µÄµÀÀí¡£

Õâ¸öËã·¨Ò²¿ÉÒÔÒÔÁíÍâµÄ˼·µÃ³ö¡£ÀýÈ磬»ù±¾Ë¼Â·ÖеÄ״̬תÒÆ·½³Ì¿ÉÒԵȼ۵رäÐγÉÕâÖÖÐÎʽ£º

f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}

½«Õâ¸ö·½³ÌÓÃһάÊý×éʵÏÖ£¬±ãµÃµ½ÁËÉÏÃæµÄα´úÂë¡£

×îºó³éÏó³ö´¦ÀíÒ»¼þÍêÈ«±³°üÀàÎïÆ·µÄ¹ý³Ìα´úÂ룬ÒÔºó»áÓõ½£º

procedureCompletePack(cost,weight)

forv=cost..V

f[v]=max{f[v],f[v-c[i]]+w[i]}

×ܽá

ÍêÈ«±³°üÎÊÌâÒ²ÊÇÒ»¸öÏ൱»ù´¡µÄ±³°üÎÊÌ⣬ËüÓÐÁ½¸ö״̬תÒÆ·½³Ì£¬·Ö±ðÔÚ¡°»ù±¾Ë¼Â·¡±ÒÔ¼°¡°O(VN)µÄËã·¨¡°µÄС½ÚÖиø³ö¡£Ï£ÍûÄãÄܹ»¶ÔÕâÁ½¸ö״̬תÒÆ·½³Ì¶¼×ÐϸµØÌå»á£¬²»½ö¼Çס£¬Ò²ÒªÅªÃ÷°×ËüÃÇÊÇÔõôµÃ³öÀ´µÄ£¬×îºÃÄܹ»×Ô¼ºÏëÒ»Öֵõ½ÕâЩ·½³ÌµÄ·½·¨¡£ÊÂʵÉÏ£¬¶ÔÿһµÀ¶¯Ì¬¹æ»®ÌâÄ¿¶¼Ë¼¿¼Æä·½³ÌµÄÒâÒåÒÔ¼°ÈçºÎµÃÀ´£¬ÊǼÓÉî¶Ô¶¯Ì¬¹æ»®µÄÀí½â¡¢Ìá¸ß¶¯Ì¬¹æ»®¹¦Á¦µÄºÃ·½·¨¡£

Ê×Ò³

P03:

¶àÖر³°üÎÊÌâ

퉀
ÓÐNÖÖÎïÆ·ºÍÒ»¸öÈÝÁ¿ÎªVµÄ±³°ü¡£µÚiÖÖÎïÆ·×î¶àÓÐn[i]¼þ¿ÉÓã¬Ã¿¼þ·ÑÓÃÊÇc[i]£¬¼ÛÖµÊÇw[i]¡£Çó½â½«ÄÄЩÎïÆ·×°Èë±³°ü¿ÉʹÕâЩÎïÆ·µÄ·ÑÓÃ×ܺͲ»³¬¹ý±³°üÈÝÁ¿£¬ÇÒ¼ÛÖµ×ܺÍ×î´ó¡£

»ù±¾Ëã·¨

ÕâÌâÄ¿ºÍÍêÈ«±³°üÎÊÌâºÜÀàËÆ¡£»ù±¾µÄ·½³ÌÖ»Ð轫ÍêÈ«±³°üÎÊÌâµÄ·½³ÌÂÔ΢һ¸Ä¼´¿É£¬ÒòΪ¶ÔÓÚµÚiÖÖÎïÆ·ÓÐn[i]+1ÖÖ²ßÂÔ£ºÈ¡0¼þ£¬È¡1¼þ¡¡È¡n[i]¼þ¡£Áîf[i][v]±íʾǰiÖÖÎïÆ·Ç¡·ÅÈëÒ»¸öÈÝÁ¿ÎªvµÄ±³°üµÄ×î´óȨֵ£¬ÔòÓÐ״̬תÒÆ·½³Ì£º

f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}

¸´ÔÓ¶ÈÊÇO(V*¦²n[i])¡£

ת»¯Îª01±³°üÎÊÌâ

ÁíÒ»ÖÖºÃÏëºÃдµÄ»ù±¾·½·¨ÊÇת»¯Îª01±³°üÇó½â£º°ÑµÚiÖÖÎïÆ·»»³Én[i]¼þ01±³°üÖеÄÎïÆ·£¬ÔòµÃµ½ÁËÎïÆ·ÊýΪ¦²n[i]µÄ01±³°üÎÊÌ⣬ֱ½ÓÇó½â£¬¸´ÔÓ¶ÈÈÔÈ»ÊÇO(V*¦²n[i])¡£

µ«ÊÇÎÒÃÇÆÚÍû½«Ëüת»¯Îª01±³°üÎÊÌâÖ®ºóÄܹ»ÏñÍêÈ«±³°üÒ»Ñù½µµÍ¸´ÔӶȡ£ÈÔÈ»¿¼ÂǶþ½øÖƵÄ˼Ï룬ÎÒÃÇ¿¼ÂǰѵÚiÖÖÎïÆ·»»³ÉÈô¸É¼þÎïÆ·£¬Ê¹µÃÔÎÊÌâÖеÚiÖÖÎïÆ·¿ÉÈ¡µÄÿÖÖ²ßÂÔ¡ª¡ªÈ¡0..n[i]¼þ¡ª¡ª¾ùÄܵȼÛÓÚÈ¡Èô¸É¼þ´ú»»ÒÔºóµÄÎïÆ·¡£ÁíÍ⣬ȡ³¬¹ýn[i]¼þµÄ²ßÂԱز»ÄܳöÏÖ¡£

·½·¨ÊÇ£º½«µÚiÖÖÎïÆ··Ö³ÉÈô¸É¼þÎïÆ·£¬ÆäÖÐÿ¼þÎïÆ·ÓÐÒ»¸öϵÊý£¬Õâ¼þÎïÆ·µÄ·ÑÓúͼÛÖµ¾ùÊÇÔÀ´µÄ·ÑÓúͼÛÖµ³ËÒÔÕâ¸öϵÊý¡£Ê¹ÕâЩϵÊý·Ö±ðΪ1,2,4,...,2^(k-1),n[i]-2^k+1£¬ÇÒkÊÇÂú×ãn[i]-2^k+1>0µÄ×î´óÕûÊý¡£ÀýÈ磬Èç¹ûn[i]Ϊ13£¬¾Í½«ÕâÖÖÎïÆ··Ö³ÉϵÊý·Ö±ðΪ1,2,4,6µÄËļþÎïÆ·¡£

·Ö³ÉµÄÕ⼸¼þÎïÆ·µÄϵÊýºÍΪn[i]£¬±íÃ÷²»¿ÉÄÜÈ¡¶àÓÚn[i]¼þµÄµÚiÖÖÎïÆ·¡£ÁíÍâÕâÖÖ·½·¨Ò²Äܱ£Ö¤¶ÔÓÚ0..n[i]¼äµÄÿһ¸öÕûÊý£¬¾ù¿ÉÒÔÓÃÈô¸É¸öϵÊýµÄºÍ±íʾ£¬Õâ¸öÖ¤Ã÷¿ÉÒÔ·Ö0..2^k-1ºÍ2^k..n[i]Á½¶ÎÀ´·Ö±ðÌÖÂ۵óö£¬²¢²»ÄÑ£¬Ï£ÍûÄã×Ô¼ºË¼¿¼³¢ÊÔһϡ£

ÕâÑù¾Í½«µÚiÖÖÎïÆ··Ö³ÉÁËO(logn[i])ÖÖÎïÆ·£¬½«ÔÎÊÌâת»¯ÎªÁ˸´ÔÓ¶ÈΪO(V*¦²logn[i])µÄ01±³°üÎÊÌ⣬ÊǺܴóµÄ¸Ä½ø¡£

ÏÂÃæ¸ø³öO(logamount)ʱ¼ä´¦ÀíÒ»¼þ¶àÖر³°üÖÐÎïÆ·µÄ¹ý³Ì£¬ÆäÖÐamount±íʾÎïÆ·µÄÊýÁ¿£º

procedureMultiplePack(cost,weight,amount)

ifcost*amount>=V

CompletePack(cost,weight)

return

integerk=1

whilek

ZeroOnePack(k*cost,k*weight)

amount=amount-k

k=k*2

ZeroOnePack(amount*cost,amount*weight)

Ï£ÍûÄã×ÐϸÌå»áÕâ¸öα´úÂ룬Èç¹û²»Ì«Àí½âµÄ»°£¬²»·Á·Òë³É³ÌÐò´úÂëÒԺ󣬵¥²½Ö´Ðм¸´Î£¬»òÕßÍ·ÄÔ¼ÓÖ½±ÊÄ£Äâһϣ¬Ò²Ðí¾Í»áÂýÂýÀí½âÁË¡£

O(VN)µÄËã·¨

¶àÖر³°üÎÊÌâͬÑùÓÐO(VN)µÄËã·¨¡£Õâ¸öËã·¨»ùÓÚ»ù±¾Ëã·¨µÄ״̬תÒÆ·½³Ì£¬µ«Ó¦Óõ¥µ÷¶ÓÁеķ½·¨Ê¹Ã¿¸ö״̬µÄÖµ¿ÉÒÔÒÔ¾ù̯O

(1)µÄʱ¼äÇó½â¡£ÓÉÓÚÓõ¥µ÷¶ÓÁÐÓÅ»¯µÄDPÒѳ¬³öÁËNOIPµÄ·¶Î§£¬¹Ê±¾ÎIJ»ÔÙÕ¹¿ª½²½â¡£ÎÒ×î³õÁ˽⵽Õâ¸ö·½·¨ÊÇÔÚÂ¥Ìì³ÉµÄ¡°ÄÐÈË°ËÌ⡱»ÃµÆƬÉÏ¡£

С½á

ÕâÀïÎÒÃÇ¿´µ½Á˽«Ò»¸öËã·¨µ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1