題意:
題目給出數軸上的n個區間,並且給出乙個已知的線段,要求從中選擇最少的的區間來覆蓋這個線段,並且要求的是覆蓋整點即可。輸出能覆蓋該線段的最少的區間數,若不存在能覆蓋該線段的區間,則輸出-1。
思路:首先用結體記錄下區間,但若區間的右端點小於線段的左端點,或者區間的左端點大於線段的右端點,則不儲存。剩下的儲存後進行排序,即以左端點a從小到大進行排序,再以右端點的從小到達排序。然後先設定起點q為0(線段的起始點為1),因為只要進行整點覆蓋即可,故區間之間可以隔乙個點,故差為1。然後開始對儲存的陣列進行遍歷。即在a總結:
主要還是先對區間進行排序,然後依次從起點選擇能到達的最遠的那個區間。並且在其中在當前線段之外的可以不考慮。另外就是整點覆蓋的問題。即【1,2】,【3,4】可以覆蓋【1,4】。故在起點可以在上乙個起點往後乙個點的位置。
**:
#include
#include
using
namespace std;
struct p };
intmain()
sort
(p, p+count);if
(count ==0)
int num =0;
//已經加入的區間數
int q =0;
//總的區間的當前的起點
for(
int j =
0; j < count;
)int temp=q;
//記錄下乙個起點
while
( j(p[j]
.a<= q+1)
) j++;}
if(temp==q)
else
if(temp >= t || j==count)
break
;//已經到達,或者區間遍歷結束 }if
程式設計思維與實踐 Week3 作業
b 區間選點 貪心 c 區間覆蓋問題 貪心 給出n個正數,從其中選出k個數,使其總和為s,問 有多少種選數方案?input 第一行是正數t t 100 表示測試的組數。每一組都輸入兩行,第一行是三個整數n,k,s,第二行是n個正整數。output 每一組輸出結果佔一行,為方案的數目。sample i...
程式設計思維與實踐 Week3 作業
給定n個正數,從中選出k個數,令其和為s,求選數的方案數。對於每乙個數選擇與不選擇都進行dfs 邊界條件 選中k個數且和為s 選中數的個數大於k 選中數的和大於s 要選的數越界了 include using namespace std int ans 0 int a 2000 int n,k,s v...
程式設計思維與實踐 week3
題目 題意 給定n個正整數,要求選出k個數,使選出來的k個數和為sum,共有多少個方案?輸入 第一行乙個數t t 100 表示有t組測試資料。接下來的兩行,一行有三個數n,k,s,一行有n個正整數。輸出 每組資料輸出乙個和為s的方案個數,每組佔一行。思路 dfs 可行性剪枝 子集列舉問題。列舉所有子...