題意:求給n個數的序列求最大的連續k個數的平均值
題解:n很大肯定不能乙個乙個試所有但是是我們發現(pre[i]-pre[j])/(i-j)如果把i,j看著橫座標pre[i],pre[j]看做縱座標的話就是求斜率了,然後此時可以用斜率優化一下如下圖
然後我們就可以在去頭的是當佇列的第二個滿足第乙個圖的條件就可以去掉佇列頭,在加入i的時候如果i滿足第二個圖的條件就可以把對尾去掉了
最後要加入讀入掛優化如果不加的會超時
#include#include#include#include#includeusing namespace std;
typedef long long int ll;
const int mx = 1e5+5;
ll pre[mx];
inline char nc()
inline bool _read(ll &sum)
dequeq;
void erase_front(int i)
}}void insert(int i)
}q.push_back(i);
}int main()
while(!q.empty())
q.pop_back();
double ans = 0;
q.push_back(0);
int j = 1;
for(int i = m; i <= n; i++)
printf("%.2f\n",ans);
}return 0;
}
Hdu 2993斜率優化
這題是斜率優化的入門題 數形結合在資訊學競賽中的應用中講得很好,這是其中的例二 在此標記個人理解上覺得重要的地方 首先這題求max即看成求最大斜率.include include include using namespace std typedef long long ll const int n...
hdu 4258 斜率優化DP
題目大意 將n個公升序數字序列,分成幾組連續的序列 每一組的所得值,等於最右邊的num2減去最左邊 的num1,的平方 c即 numi numj 2 c 解題報告 人 ghq springwater 分析可得 dp j2 dp j1 num j2 1 num j2 1 num j1 1 num j1...
hdu3507斜率優化dp
這題 n可能取500000,o n 2 就會超時吧,所有只能優化。注意到這題的動態規劃方程 dp i max dp j sum i sum j 2 m 化簡下得 dp i max dp j sum i 2 sum j 2 2 sum i sum j 無法直接用單調佇列優化,i和j不能分開。假設j比k...