內容 :
喵嗚建設公司最近由北到南蓋了一整排共n棟的大樓,且每棟大樓是緊緊貼在一起的
而喵嗚建設公司希望能夠帶給住戶舒適的住宅環境,因此決定在東面窗上貼滿隔熱紙
然而預算有限,不能有任何隔熱紙被浪費,又切割隔熱紙是一向充滿麻煩的工程
你可以幫喵嗚建設公司算出至少要幾張矩形的隔熱紙才能貼滿整排大樓的東側嗎?
輸入說明 :
第一行有一個正整數 n(n<=100000),代表有幾棟大樓
接下來n行每行有兩個正整數(<=1,000,000,000),依序代表每棟大樓的寬度及高度
輸出說明 :
輸出最少所需要的隔熱紙數
範例輸入 :
5
1 2
1 3
2 2
2 5
1 4
範例輸出 :
4
圖畫出來就好懂了:)。
回覆刪除Dim S, E, Min
Dim ans
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, N
List1.AddItem "佔"
ans = 0
For i = 1 To N
Input #1, W, H
List1.AddItem H
Next i
Do
Call SE
Call C(S, E)
Loop Until OK() = False
Print #2, ans
Close #2
Close #1
End
End Sub
Function OK() As Boolean
P = False
For i = 1 To List1.ListCount - 1
If Val(List1.List(i)) <> 0 Then P = True: Exit For
Next i
OK = P
End Function
Sub SE()
S = 0: E = 0: Min = 0
For i = 1 To (List1.ListCount - 1)
L = Val(List1.List(i))
If L = 0 And S <> 0 And E <> 0 Then Exit For
If L <> 0 Then
If Min = 0 Or (Min > L And L <> 0) Then Min = L
If S = 0 Then S = i
E = i
End If
Next i
End Sub
Sub C(A, B)
For i = A To B
List1.List(i) = Val(List1.List(i)) - Min
Next i
ans = ans + 1
End Sub
佑好,
回覆刪除題目看不懂,到底隔熱紙多大張呢?
(還有小問題就算了,隔熱紙是要貼「窗」的,和大樓高、寬,有什麼關係?)
而且,你的程式中,只處理「高度」?寬度呢?
熊掌好,
回覆刪除應該像這樣吧。
http://a3.sphotos.ak.fbcdn.net/hphotos-ak-ash4/297849_250306284992623_100000397616290_818242_8315674_n.jpg
而我是這樣處理。
http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/301602_250307304992521_100000397616290_818243_5493336_n.jpg
佑好,
回覆刪除題目的確和你畫的圖意思相符。那麼你的程式是正確的。
(我還是覺得和現實不符,至少不同大小的矩形的隔熱紙,就不用切割嗎,不過,算了,就是個題目而已,不一定要符合現實的。)
Dim B, minB
回覆刪除Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, ti
ReDim a(ti), B(ti)
For i = 1 To ti
Input #1, x, y
B(i) = y
Next
Dim Fin As Boolean, ans
Do
Fin = False
Call Min(ti)
If minB = 0 Then Exit Do
For i = 1 To ti
If Fin = True And B(i) = 0 Then Exit For
If B(i) >= minB Then Fin = True: B(i) = B(i) - minB
Next
If Fin = True Then ans = ans + 1
Loop
Print #2, ans
Close
Close
End
End Sub
Sub Min(a)
minB = 0
ReDim x(a)
For i = 1 To a
x(i) = B(i)
Next
For j = 1 To a
For i = 1 To a - 1
If x(i) > x(i + 1) Then
tmp = x(i)
x(i) = x(i + 1)
x(i + 1) = tmp
End If
Next
Next
For i = 1 To a
If x(i) > 0 Then minB = x(i): Exit For
Next
End Sub