題目鏈結
題解: 參考使用動態規劃,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...