題意:
zjm 有 n 個作業,每個作業都有自己的 ddl,如果 zjm 沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以 zjm 想知道如何安排做作業的順序,才能盡可能少扣一點分。
思路:
貪心的思想
因為每一項作業完成需要的時間相同,所以先完成分數多的扣的分越少,為了完成盡可能多的任務,可以從後向前遍歷t(從後向前這樣對其他作業的影響小),判斷哪些任務可以完成
總結:貪心思想。根據不同資料範圍進行優化
1.遍歷分數,遍歷時間,時間複雜度o(n^2)
2.遍歷時間 ,利用最大堆(每遍歷乙個t,將該t對應的任務壓入堆中(堆中元素:當前可以完成但未完成),遇到乙個合適的t便彈出最大元素。時間複雜度o(nlogn)
反思:根據不同資料範圍選擇合適的方法,比如想到1時複雜度高,那麼想想哪個資料結構可以降到logn或者n;對於每次選取最大元素可以想到最大堆,那麼遍歷t時,能不能直接得到在該t可以放的元素,可以想到桶排直接o(1)獲取。
**:
//o(n^2)兩次遍歷
#include
#include
#include
#include
using
namespace std;
struct point
}q[1050];
bool vis[
1050];
intmain()
for(
int i=
1;i<=num;i++
)sort
(q+1
,q+num+1)
;int sum=0;
for(
int j=
1;j<=num;j++
)//o(n^2)}if
(flag==
0)
sum=sum+q[j]
.score;
} cout<}return0;
}
//o(nlogn)
#include
#include
#include
#include
#include
using
namespace std;
struct point};
vector<
int> q[
1020];
int a[
1002];
int b[
1002];
intmain()
*/for
(int i=
1;i<=num;i++
) cin>>a[i]
;for
(int i=
1;i<=num;i++
) cin>>b[i]
;for
(int i=
1;i<=num;i++
) q[a[i]].
push_back
(b[i]);
for(
int i=
1000
;i>=
1;i--
)//o(nlogn)
int sum=0;
while
(!pri.
empty()
)cout<}return0;
}
DDL 的恐懼(貪心)
zjm 有 n 個作業,每個作業都有自己的 ddl,如果 zjm 沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以 zjm 想知道如何安排做作業的順序,才能盡可能少扣一點分。請你幫幫他吧 輸入包含t個測試用例。輸入的第一行是單個整數t,為測試用例的數量。每個測試用例以乙個正整...
DDL的恐懼(貪心演算法)
小明有 n 個作業,每個作業都有自己的 ddl,如果小明沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以小明想知道如何安排做作業的順序,才能盡可能少扣一點分。input 輸入包含t個測試用例。輸入的第一行是單個整數t,為測試用例的數量。每個測試用例以乙個正整數n開頭 1 n ...
培訓貪心題解
在第乙個城市加滿,之後每到乙個城市加一公升油,直到滿足最低油耗量。注意有可能在第乙個城市就超過最低油耗量。include using namespace std int main 使用k次最大值的表情,再使用一次第二大值的表情,迴圈直到m次。include using namespace std l...