鏈哄櫒鍒嗛厤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鏈哄櫒鍒嗛厤相关的知识,希望对你有一定的参考价值。

鏍囩锛?/p>

PS锛氭礇鍙2066

鎬濊矾锛?/p>

f[i][j]琛ㄧず鍓峣涓叕鍙稿垎閰峧鍙版満鍣ㄨ兘寰楀埌鐨勬渶澶ф敹鐩?/p>

c[i][j]琛ㄧず绗琲涓叕鍙稿垎閰峧鍙版満鍣ㄨ兘寰楀埌鐨勬渶澶ф敹鐩婏紙娉ㄦ剰i鍜宩鐨勫尯鍒級

杩欐牱灏卞彲浠ヤ粠涓婂線涓嬫帹

绗笁閲嶅惊鐜帶鍒跺彉閲弅涓哄墠i-1涓叕鍙稿垎閰嶇殑鏈哄櫒鏁帮紝

閭d箞鏄剧劧绗琲鍚勫叕鍙歌兘鍒嗗埌j-k鍙版満鍣?/p>

杞Щ锛歠[i][j]=max(f[i][j],f[i-1][k]+c[i][j-k])

 

鍏充簬杈撳嚭绗嚑涓叕鍙稿垎鍑犲彴鏈哄櫒锛?/p>

鎴戜滑鍙戠幇鍦ㄥ姩瑙勯噷寰堥毦璁板綍鐘舵€侊紝鎵€浠ラ噰鍙栭€掑綊鎼滅储鐨勬柟寮?/p>

鎶€鏈垎浜? id=
 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int c[11][16],f[11][16],maxl;
 5 int max(int,int);
 6 void find(int,int);
 7 int main(){
 8     int n,m;
 9     scanf("%d %d",&n,&m);
10     for (int i=1;i<=n;i++)
11         for (int j=1;j<=m;j++)
12             scanf("%d",&c[i][j]);
13     for (int i=1;i<=n;i++)
14         for (int j=1;j<=m;j++)
15             for (int k=0;k<=j;k++)
16                 f[i][j]=max(f[i][j],f[i-1][k]+c[i][j-k]);
17     printf("%d\n",f[n][m]);
18     maxl=f[n][m];
19     find(n,m);
20     return 0;
21 }
22 int max(int x,int y){
23     return x>y?x:y;
24 }
25 void find(int i,int j){
26     if (i==0) return;
27     for (int k=0;k<=j;k++)
28         if (maxl==f[i-1][k]+c[i][j-k]){
29             maxl=f[i-1][k];
30             find(i-1,k);
31             printf("%d %d\n",i,j-k);
32             break;
33         }
34 }
STD

 

以上是关于鏈哄櫒鍒嗛厤的主要内容,如果未能解决你的问题,请参考以下文章

璋堣皥golang涓殑寮曠敤绫诲瀷涓庡湴鍧€鍒嗛厤

鏈哄櫒瀛︿範瀹炴垬-Logistics鍥炲綊

鏈哄櫒瑙嗚鍏夋簮

鏈哄櫒瀛︿範瀛︿範绱㈠紩

鏈哄櫒瀛︿範锛?3-鍨冨溇閭欢鍒嗙被2

鏈哄櫒浜虹殑娲诲姩鑼冨洿