poj1873 列舉 凸包

2021-06-08 01:35:20 字數 1229 閱讀 1218

題意:平面上有n棵樹,現在要砍掉其中的一部分來做成籬笆將剩下的樹包圍起來,現在給出每棵樹的座標、價值和可以製造籬笆的長度,

求砍掉最少價值的樹,將剩下的樹包圍起來,當兩種方式的價值相同時,取砍掉樹更少的方式。

由於樹棵樹不大於15,可以二進位制列舉情況,求出其它樹構成的凸包的周長即可

#include #include #include #include using namespace std;

const double eps = 1e-8;

const double inf = 999999999;

int stk[20], top, tc[20], cuted[20], num;

struct point

} pnt[20], p[20];

int dblcmp(double k)

double multi(point p0, point p1, point p2)

double getdis(point a, point b)

bool cmp(const point& a, const point& b)

double solve(point p, int sz)

}p[k] = p[0];

p[0] = tp;

sort(p+1, p+sz, cmp);

stk[0] = 0; stk[1] = 1;

top = 1;

for (i = 2; i < sz; i++)

double len = 0;

for (i = 0; i < top; i++)

len += getdis(p[stk[i]], p[stk[i+1]]);

return len+getdis(p[stk[top]], p[0]);

}int main()

else p[n1++] = pnt[j];

double tl = solve(p, n1);

if (dblcmp(len-tl) >= 0) }}

printf ("forest %d\ncut these trees:", cas);

for (i = 0; i < num; i++)

printf (" %d", cuted[i]+1);

printf("\nextra wood: %.2lf\n\n", extra);

}return 0;

}

poj 1873 final 水題 位列舉凸包

題意 有n棵樹,每棵樹有座標,價值,和用作籬笆的長度,求選擇幾棵樹做籬笆後,圍住剩下的樹的總價值最高的方案,如果相同價值,就取用做籬笆的樹最少的一種 include include include include include include include includeusing namesp...

POJ 1018 列舉 貪心

題意 有n件商品,每件商品有m個製造商,每個製造商製造的商品有不同的 頻寬和 每件商品必須選乙個製造商,最後的頻寬是所有頻寬中的最小值,價值是所有商品的總 目的是使b p最大,輸出最大的b p的值。思路 由於資料範圍比較小,所以可以列舉。可以求出所有製造商的商品的最大頻寬和最小頻寬,然後列舉在兩者之...

poj 2002 列舉 雜湊

給定n個點,求出這些點一共可以構成多少個正方形。sample input 4 1 00 1 1 10 0 90 0 1 02 0 0 21 2 2 20 1 1 12 1 4 2 5 3 70 0 5 20sample output 1 61可列方程 可以得出 知道兩點求出其餘兩點 x3 node ...