教育类网站开发文档上海工程项目查询
news/
2025/9/24 19:51:19/
文章来源:
教育类网站开发文档,上海工程项目查询,aspnet东莞网站建设价格,官方网站怎么找仓库建设
luogu 2120
题目大意
有一个斜坡#xff0c;上面有n个工厂#xff08;山顶是1#xff0c;山脚是nnn#xff0c;工厂都是漏填#xff09;#xff0c;上面有pip_ipi个货物#xff0c;和工厂1的距离为x1x_1x1 现在有一场大雨#xff0c;你可以在某些工厂处…仓库建设
luogu 2120
题目大意
有一个斜坡上面有n个工厂山顶是1山脚是nnn工厂都是漏填上面有pip_ipi个货物和工厂1的距离为x1x_1x1 现在有一场大雨你可以在某些工厂处建立仓库费用是cic_ici没有建立仓库的工厂要把货物运到更低的仓库及编号越大的仓库运费是货物数∗*∗距离 现在问你全部货物运到仓库中最少需要多少钱
输入样例
3
0 5 10
5 3 100
9 6 10输出样例
32样例说明
在工厂 1 和工厂 3 建立仓库建立费用为 101020101020101020 运输费用为 (9−5)×312(9-5) \times 3 12(9−5)×312总费用 32。
数据范围
对于 20%20\%20% 的数据保证 n≤500n \leq 500n≤500。 对于 40%40\%40% 的数据保证 n≤104n \leq 10^4n≤104 。 对于 100%100\%100% 的数据保证 1≤n≤1061 \leq n \leq 10^61≤n≤106 0≤xi,pi,ci2310 \leq x_i,~p_i,~c_i 2^{31}0≤xi, pi, ci231 。 对于任意的 1≤in1 \leq i n1≤in保证 xixi1。x_i x_{i 1} 。xixi1。 设答案为 ansansans保证 ans∑i1npixi263ans \sum_{i 1}^{n} p_ix_i 2^{63}ans∑i1npixi263 。
解题思路
我们设fif_ifi为在iii处建仓库前iii个工厂的货物全部运到仓库的最小费用这里把ppp改为sss把xxx改为vvv 我们就可以得出转移方程 fimin{fjci∑kj1i−1(vi−vk)sk}min{fjci∑kj1i(vi−vk)sk}min{fjci∑kj1ivisk−∑kj1ivksk}min{fjci(sumsi−sumsj)vi−(vsi−vsj)}\begin{aligned}f_i \min\{f_jc_i\sum_{kj1}^{i-1}(v_i-v_k)s_k\} \\ \min\{f_jc_i\sum_{kj1}^{i}(v_i-v_k)s_k\} \\ \min\{f_jc_i\sum_{kj1}^{i}v_is_k-\sum_{kj1}^{i}v_ks_k\} \\ \min\{f_j c_i (sums_i-sums_j)v_i - (vs_i - vs_j)\} \end{aligned}fimin{fjcikj1∑i−1(vi−vk)sk}min{fjcikj1∑i(vi−vk)sk}min{fjcikj1∑ivisk−kj1∑ivksk}min{fjci(sumsi−sumsj)vi−(vsi−vsj)} 注 第二行加了iii这一项但因为vi−vi0v_i-v_i0vi−vi0所以结果不变 第四行vsi∑j1ivisivs_i\sum_{j1}^{i} v_is_ivsi∑j1ivisi 若现在有两个决策点a,ba,ba,b满足ab,aab,aab,a优于bbb 则 faci(sumsi−sumsa)vi−(vsi−vsa)fbci(sumsi−sumsb)vi−(vsi−vsb)f_a c_i (sums_i-sums_a)v_i - (vs_i - vs_a) f_b c_i (sums_i-sums_b)v_i - (vs_i - vs_b)faci(sumsi−sumsa)vi−(vsi−vsa)fbci(sumsi−sumsb)vi−(vsi−vsb) facisumsivi−sumsavi−vsivsafbcisumsivi−sumsbvi−vsivsbf_a c_i sums_iv_i-sums_av_i - vs_i vs_a f_b c_i sums_iv_i-sums_bv_i - vs_i vs_bfacisumsivi−sumsavi−vsivsafbcisumsivi−sumsbvi−vsivsb fa−sumsavivsafb−sumsbvivsbf_a-sums_av_i vs_a f_b-sums_bv_i vs_bfa−sumsavivsafb−sumsbvivsb (favsa)−(fbvsb)sumsavi−sumsbvi(f_avs_a)-(f_bvs_b) sums_av_i-sums_bv_i(favsa)−(fbvsb)sumsavi−sumsbvi (favsa)−(fbvsb)sumsavi−sumsbvi(f_avs_a)-(f_bvs_b) sums_av_i-sums_bv_i(favsa)−(fbvsb)sumsavi−sumsbvi ((favsa)−(fbvsb))/(sumsa−sumsb)vi((f_avs_a)-(f_bvs_b))/(sums_a-sums_b)v_i((favsa)−(fbvsb))/(sumsa−sumsb)vi 我们设 yifivsay_if_ivs_ayifivsa xisumsix_isums_ixisumsi 则 (ya−yb)/(xa−xb)vi(y_a-y_b)/(x_a-x_b)v_i(ya−yb)/(xa−xb)vi 然后按照斜率优化模板套即可
代码
#includecstdio
#includecstring
#includeiostream
#includealgorithm
#define ll long long
using namespace std;
ll n, l, r, v[1000050], s[1000050], c[1000050], d[1000050], y[1000050], f[1000050], vs[1000050];
int main()
{scanf(%d, n);for (int i 1; i n; i){scanf(%d%d%d, v[i], s[i], c[i]);vs[i] vs[i - 1] v[i] * s[i];s[i] s[i - 1];//s没用就直接弄成前缀和}for (int i 1; i n; i){while(r l (y[d[l 1]] - y[d[l]]) v[i] * (s[d[l 1]] - s[d[l]])) l;//模板f[i] f[d[l]] c[i] (s[i] - s[d[l]]) * v[i] - (vs[i] - vs[d[l]]);y[i] f[i] vs[i];while(r l (y[i] - y[d[r]])*(s[d[r]] - s[d[r-1]]) (y[d[r]] - y[d[r-1]])*(s[i] - s[d[r]])) r--;d[r] i;}printf(%d, f[n]);return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916164.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!