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

2021-07-05 01:30:51 字數 1125 閱讀 8902

時間限制:

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

**經典題目

上傳者tc_胡仁東

#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#include#include#include#include#define l(x) (x<<1)

#define r(x) (x<<1|1)

#define mid(x,y) ((x+y)>>1)

#define bug printf("hihi\n")

#define eps 1e-8

typedef long long ll;

using namespace std;

#define inf 0x3f3f3f3f

#define n 105

char c[100];

int va[n];

ll sum[n][n];

int n,k;

ll dp[n][n];

void inint()

void dp()

{ int i,j;

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

dp[0][0]=1;

for(i=1;i<=k;i++)

{dp[i][i]=dp[i-1][i-1]*va[i];

for(int j=i+1;j<=n;j++)

for(int t=i-1;t

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

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

區間dp 整數劃分nyoj746

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

整數劃分(區間DP)

題意 給你乙個大數n,和乙個m,問你在n總插入m 1個乘號,被分成m段 使最後結果最大。題解 想遞推方程 dp i j 前 i 個數被分成 j 段 dp i j max dp i j dp k j 1 a k 1 j k 在這裡列舉指的是在前i個數被分成j段的情況下,在1 i中再插入乙個乘號。所以得...