http://www.lydsy.com/JudgeOnline/problem.php?id=1061

单纯形。。。

先开始我不知道对偶,看着代码不知所措,并不能懂他们写的是什么。。。

单纯形的标准形式是uoj上那样的,限制小于,最大化,但是这道题是最小化,而且系数取负还不行(我的理解是取负了无法正常运行),那么我们引入了对偶

对偶其实就是把矩阵转一下 a[i][j]=b[j][i] swap(n,m)就好了,然后跑单纯形。。。

#include<bits/stdc++.h>
using namespace std;
const int N = ;
const double eps = 1e-;
int n, m, l, e;
double a[N * ][N], b[N][N * ];
void pivot(int l, int e)
{
double r = a[l][e]; a[l][e] = 1.0;
for(int i = ; i <= m; ++i) a[l][i] /= r;
for(int i = ; i <= n; ++i) if(i != l)
{
double r = a[i][e]; a[i][e] = ;
for(int j = ; j <= m; ++j) a[i][j] -= r * a[l][j];
}
}
void simplex()
{
while(true)
{
l = e = ;
for(int i = ; i <= m; ++i) if(a[][i] > eps)
{ e = i; break; }
if(!e) break;
double k = 1e18;
for(int i = ; i <= n; ++i) if(a[i][e] > eps && a[i][] / a[i][e] < k)
{
k = a[i][] / a[i][e];
l = i;
}
if(!l) break;
pivot(l, e);
}
printf("%d\n", (int)(-a[][] + 0.5));
}
int main()
{
// freopen("employee.in", "r", stdin);
// freopen("employee.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i) scanf("%lf", &b[i][]);
for(int i = ; i <= m; ++i)
{
int s, t; double c; scanf("%d%d%lf", &s, &t, &c);
for(int j = s; j <= t; ++j) b[j][i] += 1.0;
b[][i] += c;
}
swap(n, m);
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) a[i][j] = b[j][i];
simplex();
// fclose(stdin); fclose(stdout);
return ;
}

bzoj1061&&bzoj3256的更多相关文章

  1. 【bzoj1061】 Noi2008—志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 (题目链接) 题意 给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l, ...

  2. [BZOJ1061][Noi2008]志愿者招募

    [BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...

  3. bzoj1061 志愿者招募

    bzoj1061 志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者.经 ...

  4. 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募

    线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...

  5. BZOJ1061 [Noi2008]志愿者招募 【单纯形】

    题目链接 BZOJ1061 题解 今天终于用正宗的线性规划\(A\)了这道题 题目可以看做有\(N\)个限制和\(M\)个变量 变量\(x_i\)表示第\(i\)种志愿者的人数,对于第\(i\)种志愿 ...

  6. 【BZOJ1061】【NOI2008】志愿者招募

    [BZOJ1061][NOI2008]志愿者招募 题面 BZOJ 题解 我们设每类志愿者分别招募了\(B[i]\)个 那么,我们可以得到一系列的方程 \[\sum_{S[i]\leq x\leq T[ ...

  7. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法

    [BZOJ1061][Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募 ...

  8. 【BZOJ1061】志愿者招募(单纯形,对偶性)

    题意: 这个项目需要N 天才能完成,其中第i 天至少需要 Ai 个人. 布布通过了解得知,一共有M 类志愿者可以招募.其中第i 类可以从第Si 天工作到第Ti 天,招募费用 是每人Ci 元.新官上任三 ...

  9. [BZOJ1061][Noi 2008]志愿者招募(网络流)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1061 分析: 神题不解释,只能欣赏:https://www.byvoid.com/bl ...

随机推荐

  1. nginx+keepalived+tomcat+memcache实现双VIP高可用及Session会话保持

    Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持 IP 信息列表: 名称         IP                      ...

  2. Java之希尔排序

    希尔排序 前面已经知道了插入排序,明白插入排序的原理,不断比较来交换相邻的元素,这样的话效率不高,为此希尔排序,在插入排序上做出了改进,通过间隔增量来比较并交换元素,这样可以减少比较交换的次数. pa ...

  3. C#读取文件-古文观止(总结一下)

    1,读取单个文件 //读取一个文本文件 private void buttonRead_Click(object sender, EventArgs e) { String path = Enviro ...

  4. HDU_5783_DivideTheSequence

    HDU_5783_DivideTheSequence  点击打开链接 题意: 生成尽量多的连续的子串,且子串的前缀和大于等于0,输出符合题意的子串的数量. 这题目是参加四月份的个人训练赛遇到的,挺水的 ...

  5. 信息的表示和处理 及 CS:APP 15213 datalab

    信息的表示和处理 在通用计算机中中,字节作为最为最小 的可寻址的内存单元,而不是访问内存中单独的位. 寻址和字节顺序 big endian (大端法),数据最高字节部分地址在地址处,和人的感觉逻辑相似 ...

  6. 【00】angular学习网站

    [00]   学习资料:   http://angularjs.cn/   英文API:http://docs.angularjs.cn/api     中文API;http://www.apjs.n ...

  7. 【Codeforces 375A】Divisible by Seven

    [链接] 我是链接,点我呀:) [题意] 让你把一个包含数字1,6,8,9的数字重新组合,使得组合成的数字能被7整除 [题解] 我们先提取出来1,6,8,9各1个 然后把剩余的len-4个数字除了0之 ...

  8. Uva10562

    Professor Homer has been reported missing. We suspect that his recent research works might have had ...

  9. codeforces 371D

    #include<stdio.h> #define N 210000 struct node { int x,next; __int64 count,vec; }pre[N]; int n ...

  10. 将Jquery EasyUI中DataGird的数据导入Excel中

    1.第一步获取前台DataGrid中的数据 var rows = $('#tb).datagrid("getRows");            if (rows.length = ...