鏈哄櫒鍒嗛厤
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>
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 }
以上是关于鏈哄櫒鍒嗛厤的主要内容,如果未能解决你的问题,请参考以下文章