題目描述
在乙個圓環上分布著n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數記為得分。輸入描述
每組資料的第1行為正整數n,1≤n≤100,表示有n堆石子.第2行有n個數,分別表示每堆石子的個數.輸出描述
輸出共2行,第1行為最小得分,第2行為最大得分樣例輸入
4樣例輸出4 4 5 9
43用dp[i][j]表示合併[i,j]區間所需要的最小代價54
那麼可以方便的得到如下關係
若i=j,則dp[i][j]=0
否則,則dp[i][j]=min+sum[i][j]
發現:計算dp[i][j]的大區間,需要先計算出dp[i][j]的小區間,所以可以考慮設定乙個變數len,從小往大遞增,根據此來控制先算小區間,再算大區間
最後,本題要求的是合併所有石子,即[i,j]區間和並的最小代價。
因此,本題答案儲存在dp[1][n]內
/*
zhangbinjie@penguin
*/#include
#include
#include
#include
#define maxn 105
using
namespace
std;
int a[maxn*2];
int dp[maxn*2][maxn*2];
int dpm[maxn * 2][maxn * 2];
int sum[maxn*2][maxn*2];
int main()
for (int i = 1; i <= n; ++i)
}for (int len = 2; len <= n; ++len) }}
mi = dp[1][n];
ma = dpm[1][n];
for (int i = 2; i < n; ++i)
cout
<< ma << " "
<< mi << endl;
}return
0;}
結果如下 141,整數型別
int,float,double,bool,character,string array,dictionary,元組型別 tuple 可選型別 optional 資料型別的首字母是大寫的 在變數名後面加冒號 和資料型別 var age int 10 一般,沒有必須明確指定變數和常量的型別。如果在宣告...
141 長按鍵入
題目描述 你的朋友正在使用鍵盤輸入他的名字 name。偶爾,在鍵入字元 c 時,按鍵可能會被長按,而字元可能被輸入 1 次或多次。你將會檢查鍵盤輸入的字元 typed。如果它對應的可能是你的朋友的名字 其中一些字元可能被長按 那麼就返回 true。示例 1 輸入 name alex typed aa...
解除安裝qemu 1 4 1
由於通過原始碼安裝的qemu沒有辦法通過系統工具進行解除安裝,也沒有辦法通過make uninstall方法解除安裝,所以只能通過刪除檔案的方式進行解除安裝。qemu可執行檔案預設放在 usr local bin,庫檔案預設放在 usr local libexec,配置檔案預設放在 usr loca...