題目的意思是要使ignatius盡可能少扣分,所以我們要盡量挑分高的優先完成,每個作業都有對應的截至日期和分數。所以最優策略就是優先找分高的,最好在截止日期當天完成(不影響別的作業),如果當天已經有作業占用了,就往前推,如果前面的日期都被別的作業占用了就意味著這個作業不能完成了,就累加到自己定義的失分變數中。
#include
using
namespace std;
typedef
struct date
date;
//結構體資料型別
date ss[
1000];
int flag[
1001];
//表示日期是否被占用
void
quicksort
(date ss,
int l,
int r)
//快排
while
(i.scorei++;if
(i} ss[i]
.deadline=dead;
ss[i]
.score=key;
quicksort
(ss,l,i-1)
;quicksort
(ss,i+
1,r);}
intmain()
for(
int i=
0;i)for
(int i=
0;i)quicksort
(ss,
0,n-1)
;//按分數從小到大排
int ans=0;
//失分變數
for(
int v=n-
1;v>=
0;v--
)//從大分數遍歷到小分數
else
else}if
(m==0)
//說明這個作業完不成了
ans+
=ss[v]
.score;}}
cout<}return0;
}
經典貪心演算法 貪心演算法概述
貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...
演算法 貪心演算法
把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...
演算法 貪心演算法
集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...