整數劃分(四)

2021-07-17 02:51:07 字數 847 閱讀 2967

整數劃分(四)

題意:給乙個數字n,把這個數字劃分成m段,求各段乘積的最大值。

思路:區間dp。

注意各個地方的下標。

列舉到第i次劃分的時候,應該從j=i-1開始掃瞄,因為此時是i個數字劃分成i段,如果數字個數小於i,那麼這一段最終劃分結果肯定是0,沒有必要去列舉了。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll a[70][70];

ll dp[70][70];

char ss [70];

int m;

int main()

}if((zero&&(n==m))||(nputs("0");

continue;

}memset(dp,0,sizeof dp);

for(int i=0;i0]=a[0][i];

}// int ans=a[0][n-1];

for(int i=1;ifor(int j=i-1;jfor(int k=0;k1]*a[k+1][j]);}}

// for(int i=0;i//

// }

printf("%lld\n",dp[n-1][m-1]);

}return

0;}

整數劃分(四)

描述 問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積 輸入 第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0 m n的位數 輸出輸出每組測試樣例結果為乙個整數佔一行 樣例輸入...

ACM 整數劃分(四)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積 輸入第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0 m...

nyoj746 整數劃分(四)

描述問題是我們經常見到的整數劃分,給出兩個整數 n m 要求在 n 中加入m 1 個乘號,將n分成m段,求出這m段的最大乘積輸入 第一行是乙個整數t,表示有t組測試資料 接下來t行,每行有兩個正整數 n,m 1 n 10 19,0 m n的位數 輸出 輸出每組測試樣例結果為乙個整數佔一行 樣例輸入 ...