標籤(空格分隔): 課堂作業
姓名:李**
學號:16340114
題目:burst balloons(
給定一串數字,每個數字代表乙個氣球,每個氣球都有乙個數值。每次扎破乙個氣球,可以得到該氣球左邊和右邊以及自身數字之積的硬幣,若果左/右沒有氣球,其數值為1。求能拿到的最大硬幣數
這個題目可以先從最簡單的情況出發,只有乙個氣球的時候,只能得到該氣球數值的硬幣數。對於一般情況,即氣球不止乙個時(下標從i到j)考慮最後乙個需要扎破的氣球。當這個氣球最後被扎破時,其餘被扎破的氣球都能獲得最大的硬幣,而扎破最後選定的氣球k的收益為num
s[i−
1]∗n
ums[
k]∗n
ums[
j+1]
nums[i-1]*nums[k]*nums[j+1]
nums[i
−1]∗
nums
[k]∗
nums
[j+1
],整段氣球的收益為:num
s[i−
1]∗n
ums[
k]∗n
ums[
j+1]
+coi
ns[i
tok−
1]+c
oins
[k+1
toj]
nums[i-1]*nums[k]*nums[j+1]\ +\ coins[i\ to\ k-1] + coins[k+1\ to\ j]
nums[i
−1]∗
nums
[k]∗
nums
[j+1
]+co
ins[
itok
−1]+
coin
s[k+
1toj
]用coins[i][j]表示nums[i…j]能獲取的最大硬幣數。(包含位置i與j),其值為:
( 1)
coin
s[i]
[j]=
0,wh
en
j<
i(1)coins[i][j]\ =\ 0,\ when\ j\ <\ i
(1)coi
ns[i
][j]
=0,w
henj2)
coin
s[i]
[j]=
nums
[i−1
]∗nu
ms[i
]∗nu
ms[i
+1],
when
j=
i(2)coins[i][j]\ =\ nums[i-1]\ *\ nums[i]\ *\ nums[i+1], when j\ =\ i
(2)coi
ns[i
][j]
=num
s[i−
1]∗n
ums[
i]∗n
ums[
i+1]
,whe
nj=i
( 3)
coin
s[i]
[j]=
max(
nums
[i−1
]∗nu
ms[k
]∗nu
ms[j
+1]+
coin
s[i]
[k−1
]coi
ns[k
+1][
j]
)(3)coins[i][j]\ =\ max(nums[i-1]\ * nums[k]\ * nums[j+1]\ +\ coins[i][k-1]\ coins[k+1][j])
(3)coi
ns[i
][j]
=max
(num
s[i−
1]∗n
ums[
k]∗n
ums[
j+1]
+coi
ns[i
][k−
1]co
ins[
k+1]
[j])
,
i<=k
<=j
,whe
nj
>
i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ,i<=k<=j, when j\ >\ i
,i<=k
<=j
,whe
nj>
i特別地,當nums下標越界時,其值為1。對(3)式中的coins[i][k-1],當k−1
<
ik-1k−
1<
i時,其值為0(k-1可能越界),coins[k+1][j]同理。
最後的答案為coins[0][nums.size()-1]。
用二維陣列儲存coins的狀態。在迴圈時,要先計算長度小的氣球串再到長度大的氣球串。注意判斷nums與coins的邊界狀態即可。
這個動態規劃問題的關鍵在於一般情況的硬幣數該怎麼算。想到只有乙個氣球時的抉擇,把這個抉擇推廣到一般情況,再稍微琢磨一下,便可求得coins的狀態表示式。
#define leftnum(x) (x==0 ? 1 : nums[x-1])
#define rightnum(x) (x==length-1 ? 1 : nums[x+1])
#define max(a, b) (a>b ? a : b)
class solution }}
int answer = coins[0][length-1];
for (int i = 0; i < length; ++i)
delete coins[i];
delete coins;
return answer;
}};
第十二周作業
例題1 includeusing namespace std struct date struct student int main stu1,stu2 stu1.num 1001 stu1.age 20 stu2 stu1 cout includeusing namespace std struc...
第十二周作業
1 多文件窗體 mdi form 功能演示 2 日期控制項datetimepicker功能演示 3 月曆控制項monthcalender功能演示 4 樹型列表控制項treeview功能演示 tn.expand 展開tn節點 treeview1.selectednode tn1 把新增節點設定為當前選...
第十二周作業
一.jpanel 方法型別 描述public jpanel 構造建立乙個預設的jpanel物件,使用流布局管理器 public jpanel layoutmanager layout 構造建立乙個指定布局管理器的jpanel物件 二.jsplitpane 三.jtabbedpane 四.jscrol...