整數劃分(四)
題意:給乙個數字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的位數 輸出 輸出每組測試樣例結果為乙個整數佔一行 樣例輸入 ...