60分钟ak,A题调了40分钟,牛客在线IDE不能断点调试,心态爆炸 A:模拟,开个mapstring, intmp[11]存一下直接找就行了 B:DP,记 \(pre_i\) 为从i往左拓展的最长的连续严格下降区间, \(suf_i\
60分钟ak,A题调了40分钟,牛客在线IDE不能断点调试,心态爆炸
A:模拟,开个map<string, int>mp[11]存一下直接找就行了
B:DP,记\(pre_i\)为从i往左拓展的最长的连续严格下降区间,\(suf_i\)为从\(i\)往右拓展的最长严格上升区间,对于每个位置\(i\):当\(pre_i>1 \&\& suf_i>1\)时,\(ans = max(ans, pre_i + suf_i - 1)\)
C:数学,易知\((x+y)\%b = x\%b + y\%b\),设子区间的左右端点为[l,r],则区间和为\((pre_r-pre_{l-1}) \%b = pre_r \% b - pre_{l-1} \%b\),因此求前缀和\(pre_i = (pre_{i-1} + a_i) \% b\),找[1,i-1]中有多少个前缀和模b与\(pre_i\)相同即可,\(pre_i\)为\(0\)也要计入答案
D:DP,倒着跑即可,记\(dp_i\)为当前取\(i\)物品能获得的最大价值,\(suf_i = max(dp_i,dp_{i+1},...,dp_n)\),
转移为\(dp_i = weight_i+ suf_{i+skip_i+1}\),最后输出\(suf_1\)即可