區間dp 整數劃分nyoj746

2021-07-22 23:32:00 字數 772 閱讀 7115

問題是我們經常見到的整數劃分,給出兩個整數 n , m ,要求在 n 中加入m - 1 個乘號,將n分成m段,求出這m段的最大乘積

輸入第一行是乙個整數t,表示有t組測試資料

接下來t行,每行有兩個正整數 n,m ( 1<= n < 10^19, 0 < m <= n的位數);

輸出輸出每組測試樣例結果為乙個整數佔一行

樣例輸入

2111 2

1111 2

樣例輸出

11121

a[i][j]表示i到j的數,dp[i][j]表示1~i插了j個乘號的最大值,

轉移:dp[i][j]=max(dp[i][j],dp[k][j-1]*a[k+1][i]) 表示在k的位子插乙個乘號。

#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define ll long long

using namespace std;

ll dp[25][25];

ll a[25][25];

int main()

memset(dp,0,sizeof(dp));

for(int i=0;i<=len-1;i++)

dp[i][0]=a[0][i];

for(int i=1;i<=len-1;i++)

for(int j=1;j<=m;j++)

for(int k=0;k

nyoj746 整數劃分(四)

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

NYOJ746 整數劃分(四)

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

nyoj 746 整數劃分(四)(區間DP)

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