乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。
你的目標是使得分的和最小。
例如,如果數是10 1 50 20 5,依次拿1、20、50,總分是 10150+50205+10505=8000
而拿50、20、1,總分是15020+1205+1015=1150。
列舉左端點i和右端點j中列舉斷點k,則
dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k][j] + a[i] * a[k] * a[j]);
解釋:dp[i][j]表示(i,j)內的最優解。對於後半句,有:當前最大值等於:(斷點前的結果+斷點後的結果+取出斷點處應新增的答案)。
則有兩種實現方法:
不解釋哩!記得寫記憶化!
#include #include #include #include using namespace std;
const int inf = 0x3f3f3f3f , n = 1e2 + 5;
int dp[n][n],n,a[n];
int dfs(int l,int r)
signed main()
列舉區間的長度,再列舉起點,則終點可確定。再次列舉斷點,進行計算。
不能寫列舉ijk的原因是,當j++的時候,dp[k][j]的值尚未更新,導致每次得到的不是區域性最優解!!//這裡想了好長時間
#include #include #include #include using namespace std;
const int inf = 0x3f3f3f3f , n = 1e2 + 5;
int dp[n][n],n,a[n];
signed main()
printf("%d",dp[1][n]);
return 0;
}
大整數乘法題解
09 大整數乘法 總時間限制 1000ms 記憶體限制 65536kb 描述 求兩個不超過200位的非負整數的積。輸入 有兩行,每行是乙個不超過200位的非負整數,沒有多餘的前導0。輸出 一行,即相乘後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。樣例輸入 1234...
區間DP 乘法遊戲
乘法遊戲 背景 background 太原成成中學第2次模擬賽 第四道 描述 description 乘法遊戲是在一行牌上進行的。每一張牌包括了乙個正整數。在每乙個移動中,玩家拿出一張牌,得分是用它的數字乘以它左邊和右邊的數,所以不允許拿第1張和最後1張牌。最後一次移動後,這裡只剩下兩張牌。你的目標...
數字遊戲題解
題目描述 丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使...