設 \(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...