bzoj 3112: [Zjoi2013]防守战线 (单纯形)
来源:互联网 发布:重庆软件开发公司 编辑:程序博客网 时间:2024/04/29 19:09
题目描述 Description
战线可以看作一个长度为 n 的序列,现在需要在这个序列上建塔来防守敌
兵,在序列第 i号位置上建一座塔有 Ci 的花费,且一个位置可以建任意多的塔
费用累加计算。有 m个区间[L1, R1], [L2, R2], …, [Lm, Rm],在第 i 个区间
的范围内要建至少 Di座塔。求最少花费。
输入描述 Input Description
第一行为两个数n,m。
接下来一行,有 n个数,描述 C数组。
接下来 m行,每行三个数 Li,Ri,Di,描述一个区间。
输出描述 Output Description
仅包含一行,一个数,为最少花费。
样例输入 Sample Input
5 3
1 5 6 3 4
2 3 1
1 5 4
3 5 2
样例输出 Sample Output
11
数据范围及提示 Data Size & Hint
位置 1建 2个塔,位置 3建一个塔,位置 4建一个塔。花费 1*2+6+3=11。
对于 20%的数据,n≤20,m≤20。
对于 50%的数据(包括上部分的数据),Di 全部为1。
对于 70%的数据(包括上部分的数据),n≤100,m≤1000。
对于 100%的数据,n≤1000,m≤10000,1≤Li≤Ri≤n,其余数据均≤10000。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define inf 1e10#define eps 1e-7using namespace std;int n,m;double a[1010][10100],b[1010],c[10100],v,ans;void pivot(int l,int e)//l是替出变量,e是替入变量 { b[l]/=a[l][e]; for (int i=1;i<=n;i++)//改变限制最近的式子的系数 if (i!=e) a[l][i]/=a[l][e]; a[l][e]=1/a[l][e];//相当于把导入变量与导出变量的系数互换,因为刚开始式子左边的系数为1,所以为原位置系数的倒数 for (int i=1;i<=m;i++) if ((i!=l)&&(fabs(a[i][e])>eps))//不是限制最近的式子,替入变量的系数不为0 { b[i]-=b[l]*a[i][e];//相当于把替入变量等于的式子带入含替入变量的式子,改变式子的值 for (int j=1;j<=n;j++) if (j!=e) a[i][j]-=a[l][j]*a[i][e]; a[i][e]=-a[l][e]*a[i][e]; } v+=c[e]*b[l];//累计计算当前目标函数常数的值 for (int i=1;i<=n;i++) if (i!=e) c[i]-=c[e]*a[l][i]; c[e]=-c[e]*a[l][e];}double simplex(){ int i,l,e; double t; while (true) { for (i=1;i<=n;i++) if (c[i]>eps) break; e=i; if (e==n+1) return v; t=inf; for (i=1;i<=m;i++) if (a[i][e]>eps&&t>(b[i]/a[i][e])) t=b[i]/a[i][e],l=i; if (t==inf) return inf; pivot(l,e); //cout<<l<<" "<<e<<endl; //cout<<v<<endl; }}int main(){ scanf("%d%d",&m,&n); for (int i=1;i<=m;i++) scanf("%lf",&b[i]); for (int i=1;i<=n;i++) { int l,r,x; scanf("%d%d%lf",&l,&r,&c[i]); for (int j=l;j<=r;j++) a[j][i]++; } ans=simplex(); printf("%.0lf",ans); return 0;}
0 0
- BZOJ 3112 Zjoi2013 防守战线 单纯形
- bzoj 3112: [Zjoi2013]防守战线 单纯形
- bzoj 3112: [Zjoi2013]防守战线 单纯形
- [BZOJ 3112][Zjoi2013]防守战线:单纯形
- BZOJ 3112([Zjoi2013]防守战线-单纯形)
- bzoj 3112: [Zjoi2013]防守战线 (单纯形)
- 线性规划单纯型法(bzoj 3112: [Zjoi2013]防守战线)
- [BZOJ3112][ZJOI2013]防守战线(单纯形)
- BZOJ 3265 志愿者招募(BZOJ 1061)加强版 && BZOJ 3112 [Zjoi2013]防守战线 单纯形
- BZOJ 3112 [Zjoi2013]防守战线
- [单纯形 || 差分费用流 || 辅助变量费用流] BZOJ 3112 [Zjoi2013]防守战线
- 【BZOJ3112】防守战线(ZJOI2013)-单纯形法+对偶理论
- BZOJ 3112 [Zjoi2013]防守战线 线性规划
- 【差分+费用流|单纯形】BZOJ3112 [Zjoi2013]防守战线
- [LP对偶费用流] BZOJ 3112 [Zjoi2013]防守战线
- BZOJ 3112 防守战线
- [BZOJ3112][Zjoi2013]防守战线
- 【BZOJ3112】[ZJOI2013]防守战线
- C++Primer第五版 第十三章习题答案(21~30)
- C/S架构的简单文件传输系统的实现
- 芬语录3.6
- Linux 如何使用桂电ipclient出校器上网 --- 最新的方法 --- 可以使用
- 双色球算法
- bzoj 3112: [Zjoi2013]防守战线 (单纯形)
- centos安装vim7.4
- C++语言— 类中的析构函数
- 转【程序员的感悟】
- 顺序表的实现
- ffmpeg linux(mac) 安装步骤
- ACM-玛雅历
- 鼠标坐标
- Spring 注解开发 dao层错误 'sessionFactory' or 'hibernateTemplate' is required 解决