lua 區間比較 區間覆蓋問題(貪心) 學步園

2021-10-18 20:16:47 字數 1142 閱讀 1224

數軸上有n個區間[ai,bi],選擇盡量少的區間覆蓋一條指定線段[s,t]。

貪心策略:

把各區間按照a從小到大排序,從前向後遍歷,然後每次選擇從當前起點s開始的最長區間,並以這個區間的右端點為新的起點,繼續選擇,直到找不到區間覆蓋當前起點s或者s已經到達線段末端。

需要注意的是,如果某一區間邊界大於s,t的邊界,應把它們變成s或t。因為超出的部分毫無意義,同時還會影響對資料的分析。

附**。

#include

#include

#include

using namespace std;

struct qujian

float a,b;

bool cmp(const qujian& s1,const qujian& s2)

return s1.a < s2.a;

int main()

qujian a[10005];

int z,n,w,h,x,r,cnt;

float start,l,__h;

scanf("%d",&z);

while(z--)

scanf("%d%d%d",&n,&w,&h);

cnt = start = 0;

__h = h*h*1.0/4;

for(int i=0;i

scanf("%d%d",&x,&r);

if(r*r < __h)

i--;n--;

continue;

l = sqrt(r*r - __h);

a[i].a = x-l > 0 ? x-l : 0;

a[i].b = x+l < w ? x+l : w;

sort(a,a+n,cmp);

int i,k = -1;

while(start < w && a[k+1].a <= start)

float mmax = -1;

for(i = k+1;a[i].a <= start && i

if(mmax < a[i].b)

mmax = a[i].b;

k = i;

start = mmax;

cnt++;

printf("%d\n",start

return 0;

貪心 區間覆蓋問題

區間覆蓋問題 time limit 1000ms memory limit 65536kb submit statistic discuss problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給...

區間貪心問題小結(區間選點,區間覆蓋,區間選取)

貪心演算法 思想 什麼是貪心演算法,什麼算得上是貪心 貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,只做出在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性...

貪心問題 區間選點以及區間覆蓋

乙個整數,代表選點的數目 215 461313 2546 2將區間按照右端點降序排序,如果右端點一樣的話,則左端點降序排序。排序完成後,先選擇第乙個區間的右端點,判斷該點與下乙個區間的關係,找到下乙個不包含該點的區間,再次選擇下乙個區間的右端點,以此類推,直到迴圈判斷完所有的區間,得到最終的點數。i...