省選測試21

2022-01-10 14:29:04 字數 2471 閱讀 8452

設 \(f[i]\) 為上一次參加的比賽是第 \(i\) 場的最大愉悅值

則 \(f[i]=max(f[i],f[j]-\frac+a[i]),j

對於隨機的資料,把列舉的範圍卡到 \(3000\) 即可

容易發現,如果沒有 \(a[j] \leq a[i]\) 的限制,那麼就是乙個裸的斜率優化 \(dp\)

把 \(f[i]-\frac-\frac\) 看做 \(y\),把 \(i\) 看做 \(x\),把 \(-i\) 看做 \(k\)

橫座標和斜率都是單調的

加上後面的限制之後可以用 \(cdq\) 分治人為地排出權值的單調性

具體地,在大區間內按照權值從小到大排序,在計算左區間對右區間的貢獻時按照在原陣列中的下標排序

#include#include#include#include#include#define rg register

inline int read()

while(ch>='0' && ch<='9')

return x*fh;

}const int maxn=1e5+5;

const double eps=1e-8;

int a[maxn],n,id[maxn];

long long f[maxn];

bool cmp1(rg int aa,rg int bb)

return (gety(j)-gety(i))/(getx(j)-getx(i));

}int q[maxn],head,tail;

void solve(rg int l,rg int r)

while(head=-1.0*id[i]) head++;

if(head<=tail) f[id[i]]=std::max(f[id[i]],f[q[head]]-1ll*(id[i]-q[head]-1)*(id[i]-q[head])/2ll+a[id[i]]);

} std::sort(id+l,id+r+1,cmp1);

solve(mids+1,r);

}int main()

考慮搜尋,搜尋時從小到大去加字元相當於按照字典序排序

搜尋的時候記錄乙個字元出現次數的字首和來判斷是否合法

資料範圍比較大,要記憶化

因為影響答案的只是上乙個字元出現的次數和前面已經出現了 \(1 \sim k\) 次的字元有多少種

把後面的部分雜湊一下存到以前面部分為下標的 \(map\) 中即可

這樣寫 \(k>8\) 的也能直接搜過,不用特判

#include#include#include#include#include#include#define rg register

typedef unsigned long long ull;

typedef long long ll;

const int maxn=1e6+5;

const ull bas=233333;

int k,tax[maxn],tot,vis[maxn],cnt;

char s[maxn];

ull ed;

ll n;

std::unordered_mapmp[30];

ll dfs(rg ull zt,rg int lat,rg ll rk) else

} rg ll nans=0,tmp=0;

cnt++;

for(rg int i=0;i<26;i++)

tax[vis[i]]--,vis[i]--;

} cnt--;

return mp[lat][zt]=nans;

}int main()

令 \(f[i][j]=f[i-1][j]+f[i][j-1]+j,f[1][x]=x+1,f[x][0]=1\)

那麼答案就是 \(f[m][n-k-1]\)

發現可以用組合數的含義去優化

然後再用 \(\sum\limits_^ c_i^y = c_^ -c_a^\) 就可以做到線性

#include#include#include#include#define rg register

inline int read()

while(ch>='0' && ch<='9')

return x*fh;

}const int maxn=1e6+5,mod=1e9+7;

inline int addmod(rg int now1,rg int now2)

inline int delmod(rg int now1,rg int now2)

inline int mulmod(rg long long now1,rg int now2)

int n,k,m,jc[maxn],jcc[maxn],ny[maxn];

int getc(rg int nn,rg int mm)

int ans=0;

int main()

省選測試21

縣里讓做核酸檢測,做的時候到挺快,排隊排了一上午,又沒交 題目大意 參加比賽可以獲得一定的愉悅值,連續不參見會減少,求能獲得的最大愉悅值 show code include include include using namespace std typedef long long l const i...

省選測試9

這個名次已經是倒數了 感覺整場考試不是很在狀態,正解想不到,暴力分也沒有打滿 其實前兩道題仔細推一下還是能想出來的 t1 2 sat 有一段時間沒有打了 優化建圖的方式和之前的某道題挺像的,但是當時那道題沒改 這次算是補了乙個鍋 t2 的資料範圍折半列舉也不難想,實現時注意一下細節就行了 t3 有一...

省選測試28

題目大意 給乙個排列,翻轉k次,問最終逆序對個數的期望值 然後在用兩個字首和分別優化這3種轉移就好了 show code include define mod x using namespace std const int n 505,m 1e9 7 int n,k,a n f n n s1 n n...