nyoj746 整數劃分(四)

2021-07-10 04:56:23 字數 994 閱讀 1138

描述

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

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

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

輸出

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

樣例輸入

2 111 2

1111 2

樣例輸出

11 121

區間dp。

我們可以每次迴圈只是觀察最後乙個乘號放**。

dp[i][j]表示0~i區間有j個乘號的最大乘積。

dp[i][j]=max(dp[i][j],dp[k][j-1]*num[k+1][i]);
k表示最後乙個乘號所在位置num[k+1][i]表示k+1~i區間組成的數字。

#include

#include

#include

#include

#include

using

namespace

std;

long

long dp[25][25];//dp[i][j]表示區間0~i有j個乘號的最大乘積

long

long num[25][25];//num[i][j]表示區間i~j組成的數字

int main()

}for (int i = 0; i < n; i++)

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

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

}return

0;}

NYOJ746 整數劃分(四)

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

區間dp 整數劃分nyoj746

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

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

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