南陽理工acm 746 整數劃分(四)(動態規劃)

2021-07-31 23:52:59 字數 1026 閱讀 9900

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度: 3

描述 問題是我們經常見到的整數劃分,給出兩個整數 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

想法:首先我們對輸入的n是按位進行操作,所以我們把n大數字輸入到字元陣列s【】中;

然後用a【i】【j】儲存s【】中從i位到j位合成的數,而dp【i】【j】儲存0到i位且中間用了j次*的數

給出動態轉移方程: dp[i][j]=max(dp[i][j],dp[k][j-1]*a[k+1][i]);

核心**:

for(i=0;i注意:j-2**:

#include

#include

#include

char  s[25];

long long a[25][25];

long long dp[25][25];

long long  max(long long  x,long long y)

int main()

{int n;

scanf("%d",&n);

while(n--)

{int m;

memset(a,0,sizeof(a));

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

memset(s,0,sizeof(s));

scanf("%s %d",s,&m);

int i,j,k,len;

len=strlen(s);

for(i=0;i

南陽理工746整數劃分 區間dp

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

南陽理工acm 176 整數劃分(二)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 把乙個正整數m分成n個正整數的和,有多少種分法?例 把5分成3個正正數的和,有兩種分法 1 1 3 1 2 2 輸入 第一行是乙個整數t表示共有t組測試資料 t 50 每組測試資料都是兩個正整數m,n,其中 1 n m 100 ...

南陽理工oj 整數劃分(DP)

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