在平面上找 n 個點, 要求這 n 個點離原點的距離分別為 $r_1,r_2, \cdots r_rn$. 最大化這 n 個點構成的凸包面積, 凸包上的點的順序任意。
注意點不一定全都要在凸包上。
$n \leq 8,r_i \leq 1000$
正解是拉格朗日乘數法。
然而作為乙隻蒟蒻,當然是不會這種巧妙的操作的。
那就亂搞吧!
考慮使用模擬退火演算法。
初始給每個節點隨機乙個相對於原點的角度,並計算它們構成的凸包面積。
設定初始溫度為$\pi$(角度為弧度制),並進行退火。
每次從所有點中隨機選擇乙個點,對其角度加上或減去溫度乘上乙個在$(0,1)$範圍內隨機的實數,計算此時的答案。
若更優,則應用這次修改,否則不作出修改。
隨機$10$次左右即可穩定得到最優解~
說這是偽模擬退火的原因是,模擬退火事實上還會根據溫度一定概率接受一次錯誤的修改,而實測這樣的效果並不是特別優。
**:
#includeusing namespace std;
typedef double db;
typedef pairpr;
const int n=19;
const db eps=1e-8;
const db pi=acos(-1);
const db mint=1e-7;
#define x first
#define y second
int n,stk[n],rr[n];
db r[n];
db ang[n],ans=0.0;
pr p[n];
inline bool cmp(pr a,pr b)
db ret=0;
for(int i=1;imint)
t*=0.994;
} ans=max(ans,cans);
}inline int spj()
int main()
for(int i=2;i<=n;i++)
if(r[i]!=r[i-1])
goto hell;
return spj();
hell:;
int t=200;
while(t--)
work();
printf("%.8f\n",ans);
return 0;
}
6 28集訓 集訓模擬賽2
第一題 n只有4,直接暴力 第二題 tarjan縮點之後跑乙個最長路 第三題 dp 第四題 思維量較大 n 的範圍很小,所以我們考慮狀壓dp 我們設 f i j k m 為第一行的狀態為 i 第二行的狀態為 j 第三行的狀態為 k 第四題的狀態為 m 所需要的最小步數 所以我們暴力列舉6重迴圈,時間...
8 1 集訓日記
今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...
8 4 集訓日記
今天看了有關組合數學的一些內容。首先,排列組合的 為 ll c ll n,ll m ll a ll n,ll m 一道組合數學 位運算的題,hdoj4810 wall painting 題目大意 有一位畫家,有 n種顏料,給出 n種顏料的值。然後在1到 n天中,他每天都會選擇相應天數的顏料數進行混合...