bzoj3550: [ONTAK2010]Vacation&&bzoj3112: [Zjoi2013]防守战线
学了下单纯形法解线性规划
看起来好像并不是特别难,第二个code有注释。我还有...*=-....这个不是特别懂
第一个是正常的,第二个是解对偶问题的
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const double eps=1e-; int n,m; double sum;
double a[][],b[],c[];
void pivot(int o,int e)
{
b[o]/=a[o][e];
for(int i=;i<=n;i++)
if(i!=e)a[o][i]/=a[o][e];
a[o][e]=/a[o][e]; for(int i=;i<=m;i++)
if(i!=o&&fabs(a[i][e])>eps)
{
b[i]-=b[o]*a[i][e];
for(int j=;j<=n;j++)
if(j!=e)a[i][j]-=a[o][j]*a[i][e];
a[i][e]*=-a[o][e];
} sum+=c[e]*b[o];
for(int i=;i<=n;i++)
if(i!=e)c[i]-=a[o][i]*c[e];
c[e]*=-a[o][e];
}
void simplex()
{
int e,o; double d;
while()
{
d=;
for(int i=;i<=n;i++)
if(c[i]>d)d=c[i],e=i;
if(d==)return ; d=(<<);
for(int i=;i<=m;i++)
if(a[i][e]>eps&&d>b[i]/a[i][e])
d=b[i]/a[i][e],o=i;
if(d==(<<)){sum=(<<);return ;} pivot(o,e);
}
}
int main()
{
int K;
scanf("%d%d",&n,&K);m=*n+;n*=;
for(int i=;i<=n;i++)scanf("%lf",&c[i]);
for(int i=;i<=m;i++)
{
b[i]=K;
for(int j=;j<=n/;j++)a[i][i+j-]++;
}
for(int i=;i<=n;i++)
b[m+i]=,a[m+i][i]++;
m+=n;
sum=;simplex();
printf("%.0lf\n",sum);
return ;
}
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const double eps=1e-; int n,m; double sum;
double a[][],b[],c[];
//解的过程中,由于基变量xi=ci,所以c也代表放在当前约束的基变量取值 void pivot(int o,int e)//把作为第o个约束的基变量用e替换
{
c[o]/=a[o][e];//没有替换之前,e的取值被当前限制,是c[o]/a[i][e],先令x=c
for(int i=;i<=m;i++)//把e的系数消掉,其实常数项c也是同理的
if(i!=e)a[o][i]/=a[o][e];
a[o][e]=/a[o][e];//难点!取倒数相当于保留了自己的常数项,而除以了上一个的常数项,这样下面就可以直接消除上一个的影响了 for(int i=;i<=n;i++)
if(i!=o&&fabs(a[i][e])>eps)//对于其它的约束条件,把离基的变量用进基的变量替代
{
c[i]-=c[o]*a[i][e];
for(int j=;j<=m;j++)
if(j!=e)a[i][j]-=a[o][j]*a[i][e];
a[i][e]*=-a[o][e];
} sum+=b[e]*c[o];//系数乘以值
for(int i=;i<=m;i++)//对于第i个变量当前已经用了b[e]*a[o][i]来贡献答案了
if(i!=e)b[i]-=a[o][i]*b[e];
b[e]*=-a[o][e];
}
void simplex()
{
int e,o; double d;
while()
{
d=;//找进基的变量
for(int i=;i<=m;i++)//基变量的b一定<=0,在非基变量中找一个对答案贡献最大(系数最大)的进基
if(b[i]>d)d=b[i],e=i;
if(d==)return ; d=(<<);//找离基的变量,进基变量系数的非负比要最小
for(int i=;i<=n;i++)//找对e的最小约束(即用此新角点截距最小,也就是当前e的取值被这个约束条件约束)离基
if(a[i][e]>eps&&d>c[i]/a[i][e])
d=c[i]/a[i][e],o=i;
if(d==(<<)){sum=(<<);return ;} pivot(o,e);
}
} int main()
{
int l,r;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%lf",&c[i]);
memset(a,,sizeof(a));
for(int i=;i<=m;i++)
{
scanf("%d%d%lf",&l,&r,&b[i]);
for(int j=l;j<=r;j++)a[j][i]++;
}
simplex();
printf("%.0lf\n",sum); return ;
}
---恢复内容结束---
bzoj3550: [ONTAK2010]Vacation&&bzoj3112: [Zjoi2013]防守战线的更多相关文章
- BZOJ3112 [Zjoi2013]防守战线 【单纯形】
题目链接 BZOJ3112 题解 同志愿者招募 费用流神题 单纯形裸题 \(BZOJ\)可过 洛谷被卡.. #include<algorithm> #include<iostream ...
- bzoj3112 [Zjoi2013]防守战线
正解:线性规划. 直接套单纯形的板子,因为所约束条件都是>=号,且目标函数为最小值,所以考虑对偶转换,转置一下原矩阵就好了. //It is made by wfj_2048~ #include ...
- 单纯形 BZOJ3112: [Zjoi2013]防守战线
题面自己上网查. 学了一下单纯形.当然 证明什么的 显然是没去学.不然估计就要残废了 上学期已经了解了 什么叫标准型. 听起来高大上 其实没什么 就是加入好多松弛变量+各种*(-1),使得最后成为一般 ...
- 【BZOJ3112】[Zjoi2013]防守战线 单纯形法
[BZOJ3112][Zjoi2013]防守战线 题解:依旧是转化成对偶问题,然后敲板子就行了~ 建完表后发现跟志愿者招募的表正好是相反的,感觉很神奇~ #include <cstdio> ...
- BZOJ3550: [ONTAK2010]Vacation
3550: [ONTAK2010]Vacation Time Limit: 10 Sec Memory Limit: 96 MBSubmit: 91 Solved: 71[Submit][Stat ...
- BZOJ 3112: [Zjoi2013]防守战线 [单纯形法]
题目描述 战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算.有m 个区间[L1, R1], [ ...
- ZJOI2013 防守战线
题目 战线可以看作一个长度为\(n\)的序列,现在需要在这个序列上建塔来防守敌兵,在序列第\(i\)号位置上建一座塔有\(C_i\)的花费,且一个位置可以建任意多的塔,费用累加计算.有\(m\)个区间 ...
- BZOJ3550 [ONTAK2010]Vacation 【单纯形】
题目链接 BZOJ3550 题解 单纯形裸题 题意不清,每个位置最多选一次 #include<algorithm> #include<iostream> #include< ...
- 数学(线性规划): ZJOI2013 防守战线
偷懒用的线性规划. #include <iostream> #include <cstring> #include <cstdio> using namespace ...
随机推荐
- javascript事件委托和jquery事件委托
元旦过后,新年第一篇. 初衷:很多的面试都会涉及到事件委托,前前后后也看过好多博文,写的都很不错,写的各有千秋,自己思前想后,为了以后自己的查看,也同时为现在找工作的前端小伙伴提供一个看似更全方位的解 ...
- Spring Quartz 和 Spring Task使用比较
Quartz 和 Spring Task执行时间对比: 1. Quartz同步模式:一个任务的两次执行的时间间隔是:“执行时间”和“trigger的设定间隔”的最大值 2. Task默认同步模式:一个 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 集训第四周(高效算法设计)O题 (构造题)
A permutation on the integers from 1 to n is, simply put, a particular rearrangement of these intege ...
- 关于解决ssh的"Write failed: Broken pipe"问题
操作环境: 服务器:微软云 Linux CentOS 虚拟机 客户端:MAC OSX terminal 问题描述: 登录虚拟机短时间内不操作就会断开连接并报该“Write failed: Broken ...
- jquery源码——noConflict实现
实现方式很简单:在初始化的时候,记录当前全局中jQuery和$两个变量的的值,用_jQuery和_$分别存放,调用noConflict方法时,使用_jQuery和_$分别恢复对应的值,并且返回jQue ...
- hadoop_exporter+prometheus
1.准备工作 安装go.glibe(需要连google服务器,咋连的,我就不写了,因为尝试了各种办法,都失败了,很伤心) 2.下载hadoop_exporter cd /usr/local/prom/ ...
- hdu 2642二维树状数组 单点更新区间查询 模板题
二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...
- 热部署jredel介绍
在进行java web程序开发过程中,经常遇到这种问题,修改一个java文件(*.java),需要重启web服务器(如tomcat,weblogic等),部署项目.而起/停服务器浪费了大量的时间.在小 ...
- 【BZOJ4583】购物(组合计数)
题意:商店出售3种颜色的球,分别为红.绿.蓝. 城市里有n个商店,第i个商店在第First_i天开始营业,连续营业Red_i+Green_i+Blue_i天,每个商店每天只能出售一种颜色的球. 每天最 ...