1. 程式人生 > >nyistOJ-整數劃分(四)(區間DP)

nyistOJ-整數劃分(四)(區間DP)

整數劃分(四)

時間限制:1000 ms  |  記憶體限制:65535 KB 難度:3
描述

       暑假來了,hrdv 又要留學校在參加ACM集訓了,集訓的生活非常Happy(ps:你懂得),可是他最近遇到了一個難題,讓他百思不得其解,他非常鬱悶。。親愛的你能幫幫他嗎?

      問題是我們經常見到的整數劃分,給出兩個整數 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]:前i個數用j個乘號所形成的最大積

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
#define maxn 50005
ll dp[50][50],a[50],b[50][50];
char s[50];
int  main()
{
	int T,i,j,k,len,m;
	scanf("%d",&T);
	while(T--)
	{
		memset(dp,0,sizeof(dp));
		scanf("%s",s+1);
		len=strlen(s+1);
		scanf("%d",&m);
		for(i=1;i<=len;i++)
			a[i]=s[i]-'0';
		for(i=1;i<=len;i++)
		{
			b[i][i]=a[i];
			for(j=i+1;j<=len;j++)
				b[i][j]=b[i][j-1]*10+a[j];
		}
		for(i=1;i<=len;i++)
			dp[i][0]=b[1][i];
		for(j=1;j<m;j++)         
			for(i=j;i<=len;i++)
				for(k=1;k<i;k++)
				    dp[i][j]=max(dp[i][j],dp[k][j-1]*b[k+1][i]);
		printf("%lld\n",dp[len][m-1]);
	}
}


相關推薦

nyistOJ-整數劃分區間DP

整數劃分(四) 時間限制:1000 ms  |  記憶體限制:65535 KB 難度:3 描述        暑假來了,hrdv 又要留學校在參加ACM集訓了,集訓的生活非常Happy(p

整數劃分問題經典解法有用

經典的dp! 有N多情況的整數劃分,下面就幾種這幾天學習的分別說一下: 1. 數n的劃分中,其最大值不能大於k:記其結果為f(n, k),那麼, 狀態轉移方程:當 n == 1 || k == 1 時,f(n, k) == 1, n為1,那麼只能為1; 而k為1,那麼

隨手練——Uva-11584 劃分成回文串區間DP

scan 方程 () lse 代碼 space turn min inf 思路:dp[i]代表到第i位的最小值,枚舉它的前幾位,求出最小值。 轉移方程:dp[ i ] = min(dp[ i ], dp[ j - 1 ] + 1 ) ; 本來覺得,代碼加深部分可以提

LightOJ - 1422 Halloween Costumes 區間DP

wan things strong cas book article printf ase con Description Gappu has a very busy weekend ahead of him. Because, next weekend is Ha

POJ3347 Kadj Squares計算幾何&區間覆蓋

ica nsis -s ber pro ins ascend char rst 題目鏈接:   http://poj.org/problem?id=3347 題目描述: Kadj Squares Description In this problem, you are

POJ 1141 Brackets Sequence 區間DP

ive bsp rip mes character har typedef som memset Description Let us define a regular brackets sequence in the following way: 1.

Brackets Sequence POJ - 1141 區間dp

gif == urn ++ char img ems utc pre Brackets Sequence POJ - 1141 題意:給一個括號序列,問最少添加多少個括號似的原序列匹配,並輸出新序列。 用dp[i][j]表示i到j最少添加幾個括號,flag[i][j]表

Brackets POJ - 2955 區間dp

pla clu for eof %d img rac end racket Brackets POJ - 2955 題意:給一個括號序列,問最多有多少個括號是可以配對的。 1 #include<cstdio> 2 #include<algori

Food Delivery ZOJ - 3469 區間dp

位置 turn pro pan return isp ive != truct Food Delivery ZOJ - 3469 題意:快遞員送外賣,n個客戶,起始位置為x,速度為v,每個客戶單位時間不滿意度增加hi,問最少增加多少不滿意度。 每一個客戶可能是從左側送到

CSUOJ-1980 不堪重負的數區間dp

inline 滿二叉樹 -a ems ext div des button problems 1980: 不堪重負的樹 Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Subm

POJ 1991 Turning in Homework區間DP

clu sin highlight sort stream ret spa 作業 ref 題目鏈接 Turning in Homework 考慮區間DP f[i][j][0]為只考慮區間[i, j]且最後在a[i]位置交作業的答案。 f[i][j][1]為只考慮區間[

hdu6212 祖瑪區間DP

tro 位置 表示 中間 ron i+1 strong 就會 題意 題意   有一個長度為n的01串,我們可以在某個地方插入一個0或者1,那麽如果有連續顏色相同的>=3個,那麽這段就會消去,兩邊的合攏。問將所有01串消去,最少需要插入多少個。(n<=200)

括號匹配問題區間dp

最小值 很好 nbsp 需要 簡單的 棧模擬 pri tex 什麽 簡單的檢查括號是否配對正確使用的是棧模擬,這個不必再說,現在將這個問題改變一下:如果給出一個括號序列,問需要把他補全成合法最少需要多少步? 這是一個區間dp問題,我們可以利用區間dp來解決,直接看代碼吧!

修長城 區間DP

urn ret 世紀 log width hide 時間 main gif Time Limit: 1000 ms Memory Limit: 256 MB Description   大家都知道,長城在自然條件下會被侵蝕,因此,我們需要修復。現在是21世紀,

Codeforces 392E Deleting Substrin區間dp

read temp put tdi char i+1 void log ++ 題目大意: ? 給定vi,wi,每次可以在wi中選擇一個子段[l,r]滿足:? |wi-wi+1|=1 (l<=i<r)? 2wi-wi-1-wi+1>=0 (l<i<

洛谷 P3374 【模板】樹狀數組 1 如題單點修改+區間查詢

ace hold reg gif sticky too aps urn cnblogs P3374 【模板】樹狀數組 1 時空限制1s / 128MB 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1

【Uva10559】Blocks區間DP

log turn logs efi read etc body pre 數量 Description 題意:有一排數量為N的方塊,每次可以把連續的相同顏色的區間消除,得到分數為區間長度的平方,然後左右兩邊連在一起,問最大分數為多少。 \(1\leq N\leq200\) S

You Are the One HDU - 4283區間dp

eas value script names elf for stdio.h 表示 text You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav

Topcoder SRM 301 Div2-1000 CorrectingParenthesization區間DP

完全 errors 實現 括號 cor ren opc fin 區間dp 題意 給定一個長度為偶數的字符串。這個字符串由三種括號組成。    現在要把這個字符串修改為一個符合括號完全匹配的字符串,改變一個括號的代價為$1$,求最小總代價。 區間DP。令$dp[i

【BZOJ】1260 [CQOI2007]塗色paint區間dp

c++ ide hid event pri display pro == spl 題目 傳送門:QWQ 分析 區間dp, 詳見代碼 代碼 /*****************************************