計蒜客 乘法最大 動態規劃

2021-09-30 18:08:15 字數 876 閱讀 6847

題目鏈結 

題解: 參考 

使用動態規劃,dp[i][j]表示前i個數中插入j個乘號的乘積最大值,

要求插入j個乘號,可以將j個乘號拆出最後乙個單獨出來,這樣原來的數就分成了2部分,

假如前一部分長度為k,則dp[i][j] = max(dp[k][j-1] * number(k+1,len)), k>=j

相當於把第二部分的長度從1遍歷一遍,取最大值,具體見**或者上述參考題解

#include #include #include using namespace std;

typedef long long ll;

char ch[25] = ;// 輸入的數字字串

int len;// 數字長度

int k;// 插入的乘號個數

ll dp[25][15];// dp[i][j] 前i個數字中插入j個乘號的最大乘積

// 計算數字l到r位的數(數字從1開始計數)

ll product(int l,int r)

return res;

}int main()

// 遍歷插入的乘號數目

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

// 遍歷前i個數

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

dp[i][j] = temp;

} printf("%lld\n",dp[len][k]);

return 0;

}

計蒜客 乘法遊戲

乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標是使得分的和最小。例如,如果數是10 1 50 20 5,依次拿1 20 50,總分是10 1 50 ...

計蒜客 逃生(基礎動態規劃)

蒜頭君在玩一款逃生的遊戲。在乙個 n times mn m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v...

計蒜客 劃分整數(動態規劃)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nnn 分解成不多於 kkk 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。輸入格式 共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1...