看了別人的解法才明白怎麼回事,連線:
摘錄他的分析過程:
題目分析:本題可以看作是
區間覆蓋問題
的乙個例子,只要對上述的內容稍微轉換以下即可,將每個圓的射擊範圍對映到區間內。可相應轉換為:數軸上有n個區間[ai,bi](這個指的是噴水裝置的合理的噴水區間),選擇盡量少的區間覆蓋一條指定線段[s,t](這個區間指的就是[0,w])。
貪心策略:
把各區間按照a從小到大排序,從前向後遍歷,然後每次選擇從當前起點s開始的最長區間,並以這個區間的右端點為新的起點,繼續選擇,直到找不到區間覆蓋當前起點s或者s已經到達線段末端。
需要注意的是,如果某一區間邊界大於s,t的邊界,應把它們變成s或t。因為超出的部分毫無意義,同時還會影響對資料的分析
還學到了pair,相當於是包含有兩個變數的struct,連線:點選開啟鏈結
#include #include #include #include using namespace std;
double f(double r,double h)
bool cmp(paira,pairb)
}sort(vec.begin(),vec.end(),cmp);
double right=0.0;
int cnt=0;
while(rightmaxl)
maxl=vec[i].second-right;
}if(maxl!=0)
else
break;
}if(right>=w)
cout
cout<<0<}
return 0;
}
NYOJ 12 噴水裝置(二) 貪心)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...
NYOJ 12 噴水裝置(二)貪心
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...
NYOJ12 噴水裝置(二) 貪心
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...