题目

战线可以看作一个长度为\(n\)的序列,现在需要在这个序列上建塔来防守敌兵,在序列第\(i\)号位置上建一座塔有\(C_i\)的花费,且一个位置可以建任意多的塔,费用累加计算。有\(m\)个区间\([L_1,R_1],[L_2,R_2],…,[L_m,R_m]\),在第\(i\)个区间的范围内要建至少\(D_i\)座塔。求最少花费。

算法1——费用流

我们会发现这题很像Noi2008 志愿者招募。

但是两式相减之后却不能产生想[志愿者招募]一样的效果,原因是对于一个区间,它体现在矩阵里面的系数不是在同一列,而是在同一行。

有个神奇的东西,就是转换成这个问题的对偶问题。对偶问题怎么转换呢,链接。

对于原问题 可以描述为:
有一个工厂,它生产\(n\)种产品,第\(i\)种产品可以卖\(c_i\)元
现在一共有\(m\)种材料 生产一个产品\(i\)需要\(a_{ij}\)个材料\(j\)
每个材料的个数有上限 为\(b_i\)
现在要求一种生产方案使得获利最多
这个问题的对偶问题 可以描述为:
你现在要找这个工厂购买原材料 第\(i\)种材料需要\(b_i\)个 价格由你定
这个工厂会把材料卖给你 仅当它觉得不亏
即它把卖给你的材料拿去做产品的价值\(\leq\)你收购做这个产品所需材料的价格和
求最少需要多少钱可以收购完

我觉得这个“证明”好形象!

然后我们就可以像[志愿者招募]一样构图,接着用跑费用流了,但是最“原始”的费用流会被卡掉\(3\)个点,所以我们要用\(zkw\)网络流!

一开始我有点担心图中会不会出现正圈,lzh教导我:如果原图没有正圈,那么残余网络中也不会有正圈!

算法2——单纯形

这个单纯形,我弄了一整个早上才明白。

这里是维基的资料。

关于单纯形,什么时候我们能跑整数的呢(在这题里面,矩阵里的元素只有\(-1,0,1\))?想到省赛就要来了,先把这个问题放一放。贴吧里有个帖子就是讨论这个的。

贴个代码,虽然不需要用double,但我还是先写个标准的单纯形吧。

#include <cstdio>
#include <cmath>
#include <iostream>
#include <assert.h>
using namespace std;const int MAXN = 1003;
const int MAXM = 10003;
const double INF = 1e100;
const double EPS = 1e-8;int n, m;
double A[MAXN][MAXM];
int main() {freopen("defend.in", "r", stdin);freopen("defend.out", "w", stdout);scanf("%d%d", &n, &m);n ++, m ++;for (int i = 1; i < n; i ++) {scanf("%lf", A[i] + m);}for (int i = 1; i < m; i ++) {int L, R;scanf("%d%d%lf", &L, &R, A[n] + i);for (int j = L; j <= R; j ++)A[j][i] = 1;}while (true) {int x = -1, y;for (int i = 1; i < m; i ++) {if (A[n][i] - EPS <= 0) continue;x = i;y = -1;double tval = INF;for (int j = 1; j < n; j ++) {if (A[j][i] - EPS <= 0) continue;double tmp = A[j][m] / A[j][i];if (tmp < tval) {tval = tmp;y = j;}}assert(y != -1);break;}if (x == -1) break;for (int i = 1; i <= m; i ++)if (i != x) A[y][i] /= A[y][x];A[y][x] = (double) 1 / A[y][x];for (int i = 1; i <= n; i ++)if (fabs(A[i][x]) > EPS)for (int j = 1; j <= m; j ++)if (i != y && j != x)A[i][j] -= A[i][x] * A[y][j];for (int i = 1; i <= n; i ++)if (i != y) A[i][x] *= - A[y][x];}printf("%.0lf\n", (double) - A[n][m]);return 0;
}

转载于:https://www.cnblogs.com/wangck/p/4463517.html

ZJOI2013 防守战线相关推荐

  1. 【学习笔记】线性规划与对偶问题和LP对偶费用流([ZJOI2013]防守战线题解)

    线性规划与对偶问题 原问题: min⁡{7x1+x2+5x3}s.t.{x1−x2+3x3≥105x1+2x2−x3≥6xi≥0\min\{7x_1+x_2+5x_3\} \\ s.t.\begin{ ...

  2. [NOI2008]志愿者招募 [Zjoi2013]防守战线 一种网络流套路

    文章目录 Description 志愿者招募 防守战线 Analyze Code Description 志愿者招募 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任 ...

  3. [ZJOI2013]防守战线

    题目描述 战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算.有m 个区间[L1, R1], [ ...

  4. BZOJ 3112 Zjoi2013 防守战线 单纯形

    题目大意: 单纯形*2.. . #include <cmath> #include <cstdio> #include <cstring> #include < ...

  5. 线性规划单纯型法(bzoj 3112: [Zjoi2013]防守战线)

    线性规划: 给出若干个不等式,再给出个函数G(),求出G()的极值 例如①x2+x3>=1:②x1+x2+x3+x4+x5>=4:③x3+x4+x5>=2 G() = x1+5*x2 ...

  6. P3337-[ZJOI2013]防守战线【单纯形】

    正题 题目链接:https://www.luogu.com.cn/problem/P3337 题目大意 nnn个地方可以建立塔也可以不建立塔,第iii个位置建立需要消耗CiC_iCi​元 mmm个限制 ...

  7. [BZOJ3110~3115]ZJOI2013

    本人未参与过ZJOI2013,前两场学校里的模拟赛用了day1day2试题,day2很开心地被初三神犇学弟虐了-- DAY1 T1 [BZOJ3110]K大数查询 直接树套树,或分治. #includ ...

  8. 转 carrer 之感

    引用:http://huzhenjie.blog.51cto.com/863711/885845 编者注:]徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山 ...

  9. 华为十年(转贴)原华为牛人写的

    华为十年 徐家骏 2007年5月28日 (注:徐是华为数据中心的头,清华硕士,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山岩建的深入地下的一个大型建筑.防辐射,可防卫星的电子 ...

最新文章

  1. ZOJ 3820 Building Fire Stations
  2. BestCoder 2nd Anniversary
  3. iOS架构-xcodebuild常用命令(22)
  4. 用Python实现Gauss-Jordan求逆矩阵
  5. 2.4.4 案例理解4种事务的隔离级别
  6. 海浪 shader_海浪下的发现
  7. specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试
  8. LeetCode 995. K 连续位的最小翻转次数(差分思想)
  9. 非对称加密算法之RSA算法实现
  10. jenkins运行日志时间与linux,查看日志
  11. 5.23 通过自定义筛选查找指定城市的指定工作人员 [原创Excel教程]
  12. Map转为String
  13. PowerPC指令集结构之同步指令:Sync和Isync
  14. 12 年前我刷了 500 道,谈谈我的学习感受
  15. MVPArch - Android MVP 快速开发框架
  16. 如何改善自己的语言表达能力?
  17. Power BI 参数解决源文件路径问题
  18. 【网络信息安全】身份认证
  19. 微盛创始人杨明:企业微信将成为中国saas的新土壤
  20. scoped的深入理解

热门文章

  1. 四章: CentOS6.5 配置连接Windows远程桌面、创建新用户、禁用root在本地或远程使用ssh登录
  2. 导向滤波python_导向滤波(Guided Filter)简要介绍
  3. 如何从零开始学python_从零开始学Python【4】--numpy
  4. 如何设置电脑锁屏时间_电脑如何设置多屏显示?多屏显示的设置方法
  5. 手把手教您如何用U盘给电脑安装WIN10系统详细教程
  6. php去小城市找还是大城市,想去大城市工作?这是冲动还是理性的选择呢?
  7. python_redis模块
  8. UI自动化页面定位(一)
  9. 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
  10. python-常用函数模块学习-subprocess