【每日一題】7月17日題目精講—bowl 碗的疊放
時間限制:c/c++
1秒,其他語言2秒
空間限制:c/c++
262144k,其他語言524288k
64bit io format:
%lld
小h有n個碗需要放進櫥櫃,她希望將他們疊起來放置。你知道每個碗都是規則的圓柱體,並且都是上寬下窄,你已經測量出了每個碗的兩個半徑及高,請你幫小h找出一種疊放順序,使得疊放出來的碗堆的高度盡量小,比如:輸入描述:100%資料滿足n < = 9。所有輸入的數絕對值不超過1000。
第一行乙個整數n,表示碗的數目。 以下n行,每行三個整數h,r1,r2。分別表示碗高及兩個半徑。其中r1輸出描述:僅乙個數,表示最小的高度。答案四捨五入取整。示例1
輸入
複製
3
5030
8035
2570
4010
90
輸出複製
55
n<9,所以直接列舉就行,挨個試一遍取最優解
碗的疊放分幾種情況:
當前的總高度應該是上底相對於上個碗的高度+上個碗底的高度
乙個乙個的放,然後看看哪一種情況下高度最高,暴力就完事了
思路很簡單,但實現有點麻煩
斜率:2*h/(x1-x2)
我調了一陣子都沒a。。。放棄了
直接借用大佬**,參考處理的細節
**選自
#include
using
namespace std;
typedef
long
long ll;
const ll inf =
0x3f3f3f3f
;const
int maxn =
1e6+10;
double h[maxn]
, r1[maxn]
, r2[maxn]
, tmp[maxn]
;double
calc
(int x,
int y)
if(r2[x]
> r2[y]
)return
max(
0.0, h[y]
- h[x]
*(r2[y]
- r1[x])/
(r2[x]
- r1[x]))
;return
max(
0.0, h[y]
*(r2[x]
- r1[y])/
(r2[y]
- r1[y]
)- h[x]);
}int id[maxn]
;int
main()
ans =
min(ans, res);}
while
(next_permutation
(id +
1, id +
1+ n));
printf
("%d\n",(
int)
(ans+
0.5));
return0;
}
每日一題 4月7日題目精講 樹
樹 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k 其他語言262144k 64bit io format lld 題目描述 shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 x,y x到y的路徑上的所有點的顏色...
每日一題 7月1日題目精講 借教室
時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量...
每日一題 5月7日題目精講 火 皇家烈焰
火 皇家烈焰 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld帕秋莉掌握了一種火屬性魔法 由於鍾愛掃雷遊戲,帕秋莉把自己圖書館前的走廊看作乙個一維的掃雷地圖,她製造了很多烈焰,排在這條走廊內 現在帕秋莉告訴你一部分...