種樹
大意:給你n個區間,使每個區間包含相應的t個數。
思路:此題為整數區間的加強版,先進行右端點排序,然後先統計已經種的樹減掉,接著再從右到左種,為後面打算,用乙個陣列標記是否種樹。
**
#include
using
namespace std;
struct zs a[
5001];
bool
cmp(zs x, zs y)
int n, h, i, j, ans, temp;
bool s[
30001];
intmain()
} temp =0;
} cout << ans;
return0;
}
噴水裝置
大意:給你幾組資料,每組n個噴頭,給出噴頭位置及半徑,求至少需要開幾個噴頭,澆灌不滿則輸出-1。
思路:可以通過公式計算出左端點和右端點,然後貪心貪盡量大的。
**
#include
using
namespace std;
struct interval a[
20000];
int tot, n, l, w;
int x[
20000
], r[
20000];
bool
cmp(interval a, interval b)
void
solve()
n = tot;
sort
(a +
1, a + n +
1, cmp)
;int i =1;
double cur =0;
int ans =0;
while
(i <= n)
if(a[i]
.b > cur)
cur = m;
ans++;if
(cur >= l)
i++;}
}int
main()
數列極差
大意:給n個數,每次刪掉2個再添上1個2數的積+1,求以此法得出的最大-最小。
思路:可以先排序,最大及先小後大擦,最小反之,由於擦掉其他部分有序,故可以用插入排,較快。
**
#include
using
namespace std;
bool
cmp(
int a,
int b)
long
long n, n2, a[
50001
], b[
50001
], i, j, maxn, minn, t;
intmain()
sort
(a +
1, a + n +
1, cmp)
;sort
(b +
1, b + n +1)
;for
(i = n2; i >=
2; i--
) a[j +1]
= t;
n2 +=1
;}maxn = a[1]
;for
(i = n; i >=
2; i--
) b[j +1]
= t;
n +=1
;}minn = b[1]
;printf
("%lld"
, maxn - minn)
;return0;
}
數列分段
大意:給長度為n的序列,每段有1個值,使其分成最少段數且每段的總和小於m。
思路:可以貪心,盡量將一段值達到最大,但是可能最後乙個數是一段,所以有特殊情況。
**
#include
using
namespace std;
long
long n, m, a[
200000
], i, t, ans;
intmain()
for(i =
0; i < n;
) ans++
; t =0;
} cout << ans;
}
演算法 貪心法
動態規劃在某一步決定優化函式的最大或者最小值時候,需要考慮子問題的優化函式值,從中選出最優的結果。貪心法 也是多不判斷,不考慮子問題的計算結果,根據當時情況採取 只顧眼前的 貪心策略決定取捨,工作量少於動態規劃很多,更具效率 可導致區域性最優化而不是全域性優化 n項活動,使用同乙個禮堂問題 si 和...
演算法 貪心法
感謝華北電力大學王墨玉老師的ppt 基礎知識 應用條件 最優子結構性質 原問題包含了其子問題的最優解 對於乙個問題可能會有不同的量度標準,選擇其中可以獲得最優解的量度標準是貪心法設計的核心問題 例題活動安排問題 可求得最優解 int greedyselector int s,int f,int a ...
貪心法簡介
1.貪心法的設計思想 例 n項活動,每項活動有開始時間和結束時間,不能同時舉行,設計安排使得被安排的活動數量最多 策略 將活動結束時間從小到大排列,從前向後選擇,只要與前面的活動相容,就將活動選入a include using namespace std int s 100 e 100 d 100 ...