摘要:
考虑逆推就行了。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int a[1010][1010]; 5 int main(){ 6 scanf("%d",&n); 7 for(int i=1;i<=n;i++) 8 for( 阅读全文
posted @ 2022-06-11 16:51
YHXo
阅读(36)
评论(0)
推荐(0)
摘要:
一道单调队列优化DP的入门题。 f[i]表示到第i头牛时获得的最大效率。 状态转移方程:f[i]=max(f[j-1]-sum[j])+sum[i] ,i-k<=j<=i。j的意义表示断点,因为不能连续安排超过k只牛,肯定要在中间断开一处。 max中f[j-1]-sum[j]只和j相关,我们可以对其 阅读全文
posted @ 2022-06-11 15:49
YHXo
阅读(55)
评论(0)
推荐(0)
摘要:
数据加强了,原来nlogn的复杂度就不行了...... 首先对原来的n个数排序(注意不能用快排),因为值域是1e5,所以可以开桶排序,开两个队列,一个存原来的n个数(已经满足单增),另一队列存两两合并后的数(也是满足单调性的),每次合并从两个队列中选取最小的两个数,合并后放入第二个队列就行了。 更难 阅读全文
posted @ 2022-06-11 14:46
YHXo
阅读(115)
评论(0)
推荐(0)
摘要:
状态表示:dp[i]表示打印前i个单词的最小成本;s[i]维护前缀和。 状态转移:dp[i]=min(dp[j]+(s[i]-s[j])2)+m , 0<=j<i。 换成y=kx+b的形式:dp[j]+s[j]2=2*s[i]*s[j]+dp[i]-s[i]2-m。 算法步骤:1.枚举i=1...n 阅读全文
posted @ 2022-06-11 14:21
YHXo
阅读(43)
评论(0)
推荐(0)
摘要:
【问题描述】 最近,afy决定给TOJ印刷广告,广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们假设每个建筑物都有一个高度,从左到右给出每个建筑物的高度H1,H2…HN,且0<Hi<=1,000,000,000,并且我们假设每个建筑物的宽度 阅读全文
posted @ 2022-06-11 09:25
YHXo
阅读(268)
评论(0)
推荐(0)

浙公网安备 33010602011771号