poj 3266 Cow School 分數規劃

2021-09-09 04:12:43 字數 967 閱讀 2333

這個題目難度非常大,首先對於老師的一種方案,應用分數規劃的一般做法,求出所有的c=t-rate*p,如果沒有選擇的c值中的最大值比選擇了的c值中的最小值大,那麼這個解是可以改進的。

那麼問題就轉化成了怎麼求最小的c和最大的c。

t-rate*p 求這種型別的最值,並且rate是單調的,那麼就可以考慮利用斜率優化的那種辦法來維護決策點。

考慮兩個決策點,得到ti-tj>rate(pi-pj)  但是這個pi pj的大小不能確定,我們知道可以利用斜率優化的問題不僅僅要rate單調,還需要pi 單調 這個時候我們需要利用題目中的條件,題目中保證了t/p單調,根據這個條件,可以推出求兩種最值的時候都只有單調的p才是有可能成為決策點的。那麼就可以按照斜率優化步驟來解題了。乙個是用單調棧維護,另外乙個利用單調佇列維護。

#include #include #include #include using namespace std;

const int maxn=5e4+9;

double high[maxn],low[maxn];

long long sumt[maxn],sump[maxn];

struct d

}test[maxn];

int que[maxn];

bool chk(int i,int j,int t,int s)

bool chk2(int i,int j,long long t,long long p)

int main()

int front=1,end=0;

for(int i=1;i<=n;i++)

int ans=0;

for(int i=1;ilow[i])

ans++;

cout<=1;i--)

if(high[i+1]>low[i])

printf("%d\n",n-i);

}return 0;

}

poj3273 poj3258 二分答案

二分答案的方法比較常用,思想比較簡單,就是從結果出發解決問題,已知答案在某乙個區間中,並且根據某種判定條件,能夠確定當前所選的值是大了還是小了,我們通過二分的方法將其找出來,從而降低時間複雜度。當然,這個判定條件就是二分答案的關鍵啦。通常,判定函式是乙個貪心演算法。二分答案的方法通常用來解決最小值最...

POJ 1716 差分約束

include include include include include include include include using namespace std define print x cout define input x cin x define inf 1 30 define si...

poj 1201 差分約束

傳送門 題意 ai到bi間至少有ci個元素,問所有數中至少有多少元素。額。這樣好像說不清楚,我拿樣例說下吧。3到7之間至少有3個元素,8到10之間至少有3個元素,6到8之間至少有1個元素,1到3之間至少有1個元素,10到11之間至少有1個元素。最少情況如下 1 2 3 4 5 6 7 8 9 10 ...