問題簡述:
有一塊草坪長為l,寬為w,同時有n個噴頭,給出噴頭的位置(距離草坪左端的距離),與噴頭噴灑的範圍,問噴頭的範圍能否覆蓋整塊草坪,若能,輸出要開的最少噴頭數,若不能,輸出-1。
問題分析:
典型的區間覆蓋問題。但該問題為二維問題,難度在於如何將二維問題轉化為一維問題,從而用簡單的一維區間覆蓋解決問題。可以發現,噴頭可以覆蓋到的草坪上下兩端的範圍可以用勾股定理轉換成水平方向的區間,而若能覆蓋及上下兩端,則水平方向必然也能覆蓋到,因此只用將每個噴頭可以覆蓋到的最遠上下兩端點轉換為覆蓋區間,即可求解。求解區間覆蓋問題用貪心思想即可,即每次取區間長度最長的區間。
程式說明:
要注意的乙個細節是問題設計到的變數盡量都用double表示,防止勾股計算過程中忘記將整型轉換為double而導致計算出現錯誤。
#include#include#include#include#include#include#include#includeusing namespace std;
struct nodepoint[10005];
bool cmp(node a,node b)
sort(point,point+n,cmp);
if(point[0].l>0)
}if(r==l)
l=r;
ans++;
} cout<}}
第六次訓練 H題
問題簡述 可樂的體積為s,同時有容量m,n s n m 的兩個杯子,三個容器間可相互倒可樂,問能否得到兩杯體積相等的可樂,若能,則輸出最短步驟數。問題分析 遵循無刻度的倒水原則,s為奇數時必然不行,可以先剪枝剪掉。而三個杯子的倒水方向可以有6種,可以使用bfs向六個方向搜尋,尋找最短路徑,當三個容器...
第六次作業
姓名 陳裕坤 學號 120705213 班級 12電信2班 作業1 總結,到目前為止,c語言基礎知識已介紹完,下一階段重點是指標。請從以下幾個方面小結 1.程式設計重在實踐,多程式設計才會對其理解更深,我是如何學習c語言的?2.程式設計涉及到方方面面知識,就像英語單詞一樣,一開始不可能了解每個c元素...
第六次作業
一 問題及 檔名稱 2.cpp 作 者 劉澤 完成日期 2017年5月18日 版 本 號 v1.0 對任務的求解方法及描述部分 輸入描述 問題描述 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序 1 刪除x 2 插入x 程式輸出 問題分析 用迴圈結構進行編寫 演算法設計 in...