2017山東day7 養貓

2022-05-20 08:48:08 字數 2136 閱讀 2302

你養了乙隻貓,為了讓它快樂地成長,你需要合理地安排它每天的作息時間。假設一天分為$ n \(個時刻,貓在每個時刻要麼是吃東西,要麼是睡覺。在第\) i $個時刻,假如貓是去吃東西,那麼它能獲得愉悅值 \(ei\),假如是去睡覺,那麼能獲得的愉悅值為 \(si\)。

貓要成長,不僅僅需要快樂,還需要健康的作息。經過研究,對於每乙個連續的長度為 k 的作息區間,即所有的時刻區間$ [i,i+k−1],1≤i≤n−k+1$,貓都要至少有 \(ms\)的時刻用來睡覺,$me $的時刻用來吃東西,這樣貓才能健康成長。

現在你想合理地安排一天中的這 n個時刻,使得貓在能健康成長的前提下,獲得盡量多的愉悅值。

第一行四個整數 \(n,k,ms,me\)。

第二行包含\(n\)個整數,代表\(si\)。

第三行包含\(n\)個整數,代表\(ei\)。

第一行乙個整數,代表貓能獲得的愉悅值。

第二行 n 個字元,可以為 s 或 e,代表貓在某個時刻是在睡覺(s)還是在吃東西(e)。

5 4 2 2

4 8 6 2 2

4 6 9 6 0

29ssees

參考部落格

我們先全部吃。

\(y_i\)和\(z_i\)是我們設出來的輔助變數,使得\(\leq ,\ge\)變成了\(=\)。

\[\beginx_1+x_2+...+x_k=t_1+y_1\\ x_1+x_2+...+x_k=k-t_2-z_1\\ x_2+x_3+...+x_=t_1+y_2\\

x_2+x_3+...+x_=k-t_2-z_2\\

...\\

x_+x_+...+x_n=t_1+y_\\

x_+x_+...+x_n=k-t_2-z_

\end

\]我們保留第\(1\)個和最後乙個方程,其他的方程與前乙個做差分,得到:

\[\begin

x_1+x_2+...+x_k=t_1+y_1\\

k-t_2=x_+x_+...+x_n+z_\\

y_i+z_i=k-t_1-t_2(1\leq i\leq n-k+1)\\

x_+k-t_1-t_2=x_i+z_i+y_(1\leq i\leq n-k)\\

\end

\]我們整理一下,使得每個未知量恰好在左邊出現一次,恰好在右邊出現一次。

我們拿方程作為節點,假設方程左邊的常數為\(lc\),右邊的常數為\(rc\),我們連\((s,i,lc,0),(i,t,rc,0)\)。(最後一維表示費用)。

然後對於未知量\(x_i\),假設它出現在\(a\)的左邊,\(b\)的右邊,我們連\((b,a,1,s_i-e_i)\)。

跑最大費用最大流。

我開始時犯了常識錯誤,即使最長路為負也要加上貢獻,因為我們要先保證最大流。

**:

#include#define ll long long

#define n 4005

using namespace std;

inline int get() while('0'<=ch&&ch<='9') return x*f;}

int n,k,t1,t2;

ll s[n],e[n],w[n];

int ss,tt;

struct road s[n<<3];

int h[n],cnt=1;

void add(int i,int j,int f,int c) ;h[i]=cnt;

s[++cnt]=(road) ;h[j]=cnt;

}ll ans;

queueq;

bool in[n];

ll dis[n];

int fr[n],e[n];

bool spfa(int s,int t)

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

add(1,3,1e9,0);

for(int i=1;i<=n-k;i++) add(i+n-k+3,i+3,1e9,0);

for(int i=1;i<=n-k;i++) add(i+n-k+3,i+2,1e9,0);

add(2,n-k+3,1e9,0);

while(spfa(ss,tt));

cout

return 0;

}

2017 山東二輪集訓 Day7 國王

給定一棵樹,每個點有黑白兩種顏色,定義一條簡單路徑合法當且僅當路徑上所有點黑色與白色數量相等,求有多少非空區間 l,r 使得所有編號 in l,r 的點形成的本質不同的合法簡單路徑數多於所有編號 notin l,r 的點形成的本質不同的合法路徑樹。考慮所有以 x 為乙個端點的合法簡單路徑數量為 f ...

2017 山東一輪集訓 Day7 逆序對

題解 滿滿的套路題。首先顯然從大到小列舉 然後每次生成的逆序對是1 i 1 的 這樣做dp是nk的 複雜度太高了 那我們轉化一下問題 變成sigma ai ai 據說是個經典問題。感覺非常奇妙 先容斥一下,也就是說 總的 至少1個條件不滿足 至少2個條件不滿足 那考慮一下如何算有x個條件不滿足 不滿...

2017暑假七林集訓day7 花翻

早上學長講課。首先講的是位運算。位運算是乙個奧妙重重的東西,比任何邏輯運算子都快上許多倍,可以用做常數優化的利器。它有許多神奇的應用,比如可以把列舉子集寫的這樣飄逸 for int x n x x x 1 n 另外呢他還有類似 builtin popcount 這種奧妙重重的底層函式。接下來講的是搜...