程式設計思維與實踐 Week3 作業C 區間覆蓋

2021-10-03 14:30:06 字數 1131 閱讀 7746

題意:

題目給出數軸上的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 可行性剪枝 子集列舉問題。列舉所有子...