鍔ㄦ€佽鍒掕繘闃剁瘒1---鑳屽寘闂
Posted 甯呭湴鐜╃紪绋?/a> 鍔ㄦ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鍔ㄦ€佽鍒掕繘闃剁瘒1---鑳屽寘闂相关的知识,希望对你有一定的参考价值。
鐐瑰嚮涓婃柟馃憜馃憜鍏虫敞鎴?/span>
鍔ㄦ€佽鍒掕繘闃剁瘒1鈥?鑳屽寘闂
澶у濂斤紝杩欐缁欏ぇ瀹跺垎浜殑棰樹細姣斾互寰€闅句竴鐐癸紝
瀛︿細浜嗚繖閬撻鐨勮В棰樻€濇兂锛屽鍔ㄦ€佽鍒掔殑鎺屾彙
灏辨洿涓婁竴灞傛ゼ浜?/code>
涓嬮潰鍏堢粰澶у璁叉湁鍏充簬鍔ㄦ€佽鍒掔殑涓や釜姒傚康锛堝叾瀹炲湪涓婁袱娆$殑棰樹腑鎴戜滑涓€鐩存湁鍦ㄧ敤锛?/p>
鏈€浼樺瓙缁撴瀯
瀵逛簬涓€涓棶棰橈紝鎴戜滑鍙互鎷嗗垎鎴愬緢澶氱浉浼肩殑瀛愰棶棰橈紝骞朵笖瑕佺畻鍑哄師闂鐨勬渶浼樿В涔嬪墠锛屽繀椤诲厛绠楀嚭瀛愰棶棰樼殑鏈€浼樿В銆備緥濡傝烦鍙伴樁鐨勯偅閬撻锛宖(n-1),f(n-2)鈥﹁繖浜涘氨鏄瓙闂锛屾垜浠绠楀嚭f(n)涔嬪墠锛屽氨蹇呴』鍏堢畻鍑篺(n-1),f(n-2)銆?/p>鐘舵€?br> 鎵€璋撶殑鐘舵€佸氨鏄寚杩欎釜闂瑙e喅浜嗘病鏈夛紙鍖呮嫭瀛愰棶棰橈級銆傛垜浠敤1琛ㄧず宸茶В鍐筹紝鐢?琛ㄧず鏈В鍐筹紙杩欎釜鐢ㄤ粈涔堟暟瀛楄〃绀洪兘琛岋級銆備緥濡傚綋鎴戜滑姹傚嚭浜唂(n-1)鏃讹紝灏辨妸瀹冪殑鐘舵€佽褰曚负1锛屽惁鍒欒褰曚负0銆傝褰曠姸鎬佷富瑕佹槸涓轰簡闃叉澶ч噺鐨勯噸澶嶆眰瑙c€傜劧鍚庝笅娆¤绠椾箣鍓嶏紝鍏堟煡鐪嬫槸鍚﹁鍑芥暟鏄惁宸茬粡绠楄繃
闂锛?/h1>
缁欏畾n绉嶇墿鍝佸拰涓€鑳屽寘銆傜墿鍝乮鐨勯噸閲忔槸wi锛屽叾浠峰€间负vi锛岃儗鍖呯殑瀹归噺涓篊銆傞棶搴斿浣曢€夋嫨瑁呭叆鑳屽寘鐨勭墿鍝侊紝浣垮緱瑁?br>鍏ヨ儗鍖呬腑鐗╁搧鐨勬€讳环鍊兼渶澶?
涓汉鎰熻杩欓亾缁忓吀鐨?-1鑳屽寘闂杩樻槸鎸洪毦鐨勶紝
鍙嶆褰撴椂鐪嬩簡濂藉嚑閬嶆墠鐪嬫噦锛屾墠鐞嗚В瀹冪殑鍋氭硶
瑙f瀽锛?/h1>
褰撶劧锛屽浜庤繖閬撻锛屽鏋滀綘鎯宠鏆村姏閫掑綊鐨勬柟娉曞仛涔熸槸鍙互鐨勩€備緥濡傛垜浠彲浠ユ妸鎵€鏈夌墿鍝佺湅鍑轰竴涓泦鍚堬紝鐒跺悗鎶婃墍鏈夊瓙闆嗛兘姹傚嚭鏉ワ紝鐒跺悗鐪嬬湅閭d釜闆嗗悎鐨勭墿鍝佽鐨勪笅涓斾环鍊兼渶楂樸€備笉杩囨椂闂村鏉傚害鏄?鐨刵娆℃柟銆傛寚鏁板闀跨殑澶嶆潅搴﹁嚜宸辨巶閲忋€?/p>
鏆村姏閫掑綊鐨勫仛娉曞涓?C++)锛堟垜灏变笉甯﹀ぇ瀹舵壘閫掑綊缁撴潫绛夋潯浠朵簡锛?/p> 閲嶅绠椾簡鍚屼竴涓嚱鏁板緢澶氶亶锛屽涓嬪浘 鎵€鐢ㄦ暟鎹畁=4,C=5,(w,v)={(2,3),(1,2),(3,4),(2,2)}; 澶у鍙互灏濊瘯鐢ㄤ笅鎶妔olve(i,j)杩欎釜鍑芥暟鏄惁绠楄繃鐨勭姸鎬佷繚瀛樿捣鏉ワ紝鐒跺悗璁$畻涔嬪墠鍏堟煡鐪嬫槸鍚﹀凡缁忕畻杩囥€傚鏋滅畻杩囧垯鐩存帴杩斿洖銆傞€掑綊寮忕殑鍔ㄦ€佽鍒掑氨涓嶅甫澶у鍋氫簡,涓昏鏄鎺ヨЕ涓嬪叾浠栧仛娉曞嫆锛岄灏辫澶氬仛鎵嶈兘鐔熻兘鐢熷阀 鏁版嵁鍙橀噺璇存槑锛?/p> 瀵逛簬涓€绉嶇墿鍝侊紝瑕佷箞瑁呭叆鑳屽寘锛岃涔堜笉瑁呫€傛墍浠ュ浜庝竴绉嶇墿鍝佺殑瑁呭叆鐘舵€佸彲浠ュ彇0鍜?.鎴戜滑璁剧墿鍝乮鐨勮鍏ョ姸鎬佷负xi,xi鈭?(0,1)銆?/p> 鏁版嵁锛氱墿鍝佷釜鏁皀=5,鐗╁搧閲嶉噺w[n]={0锛?锛?锛?锛?锛?},鐗╁搧浠峰€糣[n]={0锛?锛?锛?锛?锛?},C=10锛?span>锛堜负浜嗘柟渚胯鏄庯紝灏忔爣浠?寮€濮嬶級 瀵逛簬m(i,j)灏辫〃绀哄彲閫夌墿鍝佷负i鈥鑳屽寘瀹归噺涓簀(鎬婚噸閲?鏃惰儗鍖呬腑鎵€鏀剧墿鍝佺殑鏈€澶т环鍊笺€?/p> 寤虹珛濡備笅鏂规牸鍥撅紙鍏跺疄灏辨槸涓€涓簩缁存暟缁勶級 杩囩▼濡備笅 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 浠g爜濡備笅锛圕++锛?/strong> 鍔ㄦ€佽鍒掔殑瀹炶川灏辨槸锛屽皢闂鍖栦负姹傝В瀛愰棶棰橈紝鍓嶄竴涓瓙闂鏈€鍊奸棶棰樻眰瑙d簡锛屽鏋滀綘鎵惧埌瀛愰棶棰樹笌褰撳墠闂鐨勫叧绯伙紝閭d箞褰撳墠闂灏辫В鍐充簡锛屾槸涓€涓凯浠g殑杩囩▼銆?br>鍙﹀锛屽皢鎼滅储杩涜璁板繂鍖栵紝涔熷氨鏄鎶婄畻杩囩殑璁板綍璧锋潵銆?/p> 闂鎻忚堪锛?/strong> 灏忔槑鏄竴涓枩娆㈢湅鍔ㄧ敾鐗囩殑浜猴紝鑷粠鎴愪负ACMer锛圓CM鐖卞ソ鑰咃級涔嬪悗锛屼粬鍙堣糠涓婁簡缃戜笂鍋氶銆傚仛棰樿浠栧揩涔愶紝涓嶈繃杩欎篃鏄渶瑕佷粯鍑虹簿鍔涚殑锛侊紒 杈撳叆鏍煎紡 杈撳嚭鏍煎紡 杈撳叆鏍蜂緥 杈撳嚭鏍蜂緥 甯屾湜澶у鑳芥湁鎵€鏀惰幏銆?/p> 涓嬮潰浜岀淮鐮?br>
以上是关于鍔ㄦ€佽鍒掕繘闃剁瘒1---鑳屽寘闂的主要内容,如果未能解决你的问题,请参考以下文章
int n, C;//n琛ㄧず鐗╁搧鐨勬暟閲忥紝C琛ㄧず鑳屽寘鑳芥壙杞界殑閲嶉噺
int v[Max_n+1], w[Max_n+1];//v[i]琛ㄧず鍦癷涓墿鍝佺殑浠峰€硷紝w[i]琛ㄩ噸閲?
//浠庣i涓墿鍝佹寫閫夋€婚噸閲忓皬浜巎鐨勯儴鍒? //**涓嬫爣浠?寮€濮?*
int solve(int i, int j){
int sum;
if(i > n){//宸茬粡娌℃湁鐗╁搧浜嗭紙鍥犱负涓嬫爣浠?寮€濮嬬殑锛? sum = 0;
}else if(j < w[i]){
//杩欎釜鐗╁搧瑁呬笉涓? sum = solve(i+1, j);//鎸戦€変笅涓€涓墿鍝? }else{
//鐗╁搧瑁呯殑涓? //鍒嗘槸鍚︽寫閫夌墿鍝佷袱绉嶆儏鍐? //涓嶈锛屽垯灏濊瘯鎸戦€?涓嬩竴涓? //瑁呯殑璇濓紝鑳屽寘瀹归噺鍙樹负j-w[i],鍗曚环鍊煎浜唙[i]
sum = max(solve(i+1, j), solve(i+1, j-w[i])+v[i]);
return sum;
}
}
int main(){
int sum = solve(n, C);
}
涓嬮潰浠嬬粛鐢?span class="mq-22">閫掓帹寮?/span>鐨勫姩鎬佽鍒?/h1>
nt solve(int m[][11],int w[],int v[],int n)//n浠h〃鐗╁搧鐨勪釜鏁?
{
//閲囩敤浠庡簳鍒伴《鐨勯『搴忔潵璁剧疆m[i][j]鐨勫€?
//棣栧厛鏀緒[n]
for(int j = 0; j <= c; j++){
if(j < w[n]) m[n][j] = 0; //j灏忎簬w[n],鏀句笉涓嬶紝鎶婃墍瀵瑰簲鐨勫€艰涓?锛屽惁鍒欏氨涓哄彲浠ユ斁缃?
else m[n][j] = v[n];
}
//瀵瑰墿涓嬬殑n-1涓墿鍝佽繘琛屾斁缃€?
int i;
for(i = n-1; i >= 1; i--){
for(int j = 0; j <= c; j++)
if(j < w[i]) {
m[i][j] = m[i+1][j];//濡傛灉j < w[i]鍒欙紝琛ㄧず鏀句笉涓嬶紝瀹冪瓑浜庝笂涓€涓綅缃殑鍊笺€?
}else {
//鍚﹀垯锛屽氨鑰冭檻鏄惁瑕佹斁缃紝鍘熺悊鍜岄€掑綊鍋氭硶鐩镐技
m[i][j] = max(m[i+1][j], m[i+1][j-w[i]] + v[i]);
}
return m[1][c];//m[1][c]灏辨槸鎵€姹傛渶澶у€?}
鍋囪鏈塶閬撻锛孡ian鍋氬嚭绗琲閬撻鍚庯紝浠栧彲浠ヨ幏寰楃殑蹇箰鎸囨暟灏嗗鍔爂ethappy[i]锛岃€屾秷鑰楁帀鐨勭簿鍔涘皢鏄痩osspow[i]銆?br>鍋囪Lian鍒濆鐨勫揩涔愭寚鏁颁负1锛岀簿鍔涗负2000銆傚彲浠ョ悊瑙o紝濡傛灉浠栨秷鑰楀畬浜嗘墍鏈夌殑绮惧姏閭d粬寰楀埌鍐嶅鐨勫揩涔愰兘娌℃湁鐢ㄣ€?br>浣犵殑浠诲姟灏辨槸甯粬璁$畻浠栨墍鑳藉緱鍒扮殑鏈€澶氱殑蹇箰鎸囨暟锛屼笖鏈€鍚庝粬渚濈劧鏈夊浣欑殑绮惧姏锛堝嵆鑷冲皯涓?锛夈€?/p>
绗竴琛岃緭鍏ヤ竴涓暣鏁皀锛岃〃绀烘湁n涓汉銆?n<=50)
绗簩琛岃緭鍏涓暣鏁帮紝琛ㄧずgethappy[1]鍒癵ethappy[n]
绗笁琛岃緭鍏涓暣鏁帮紝琛ㄧずlosspow[1]鍒發osspow[n]銆?/code>
涓€涓暣鏁帮紝琛ㄧず灏忔槑鎵€鑳借幏寰楃殑鏈€澶у揩涔愭寚鏁般€?/code>
3
15 23 61
350 1301 1513
77