【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
【BZOJ1061】[Noi2008]志愿者招募
Description
Input
Output
仅包含一个整数,表示你所设计的最优方案的总费用。
Sample Input
2 3 4
1 2 2
2 3 5
3 3 2
Sample Output
HINT
1 ≤ N ≤ 1000,1 ≤ M ≤ 10000,题目中其他所涉及的数据均 不超过2^31-1。
题解:先%一发吴大爷http://wenku.baidu.com/view/ce5784754a7302768f99391d
本题给出的条件正好是标准形的,所以可以直接敲板子。不过本题求的是最小值,我们可以转化成对偶问题来求(感觉就是把单纯形表转置了一下~)。
另外在candy的博客上学了全幺模矩阵,感觉十分有用
bz1061:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
const int maxn=1010;
const int maxm=10010;
const double eps=1e-5;
const double inf=1e12;
double A[maxm][maxn];
int p[maxn];
int n,m;
//0?->C ?0->B 00->ans
void pivot(int l,int e)
{
double t=A[l][e];A[l][e]=1;
int i,j;
for(j=0;j<=n;j++) A[l][j]/=t;
for(p[0]=j=0;j<=n;j++) if(fabs(A[l][j])>eps) p[++p[0]]=j;
for(i=0;i<=m;i++) if(i!=l&&fabs(A[i][e])>eps)
{
t=A[i][e],A[i][e]=0;
for(j=1;j<=p[0];j++) A[i][p[j]]-=t*A[l][p[j]];
}
}
void simplex()
{
while(1)
{
double mn=inf;
int i,j,l=0,e=0;
for(j=1;j<=n;j++) if(A[0][j]>eps)
{
e=j;
break;
}
if(!e) return ;
for(i=1;i<=m;i++) if(A[i][e]>eps&&A[i][0]/A[i][e]<mn) mn=A[i][0]/A[i][e],l=i;
if(!l) return ;
pivot(l,e);
}
}
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
int i,j,l,r;
for(i=1;i<=n;i++) A[0][i]=rd();
for(i=1;i<=m;i++)
{
l=rd(),r=rd(),A[i][0]=rd();
for(j=l;j<=r;j++) A[i][j]=1;
}
simplex();
printf("%d",int(-A[0][0]+0.5));
return 0;
}
bz3265:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
const double eps=1e-7;
const double inf=1e12;
double A[10010][1010];
int p[1010];
int n,m;
void pivot(int l,int e)
{
double t=A[l][e];A[l][e]=1;
int i,j;
for(j=0;j<=n;j++) A[l][j]/=t;
for(p[0]=j=0;j<=n;j++) if(fabs(A[l][j])>eps) p[++p[0]]=j;
for(i=0;i<=m;i++) if(i!=l&&fabs(A[i][e])>eps)
{
t=A[i][e],A[i][e]=0;
for(j=1;j<=p[0];j++) A[i][p[j]]-=t*A[l][p[j]];
}
}
void simplex()
{
while(1)
{
double mn=inf;
int i,j,l=0,e=0;
for(j=1;j<=n;j++) if(A[0][j]>eps)
{
e=j;
break;
}
if(!e) return ;
for(i=1;i<=m;i++) if(A[i][e]>eps&&A[i][0]/A[i][e]<mn) mn=A[i][0]/A[i][e],l=i;
if(!l) return ;
pivot(l,e);
}
}
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
int i,j,a,l,r;
for(i=1;i<=n;i++) A[0][i]=rd();
for(i=1;i<=m;i++)
{
a=rd();
while(a--)
{
l=rd(),r=rd();
for(j=l;j<=r;j++) A[i][j]=1;
}
A[i][0]=rd();
}
simplex();
printf("%d",int(-A[0][0]+0.5));
return 0;
}
【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法的更多相关文章
- bzoj1061: [Noi2008]志愿者招募
线性规划与费用流.http://www.cnblogs.com/iiyiyi/p/5616080.html.数组范围开错了!!!然后2.31-1=0x7fffffff!=0x7f7f7f7f. 开始以 ...
- bzoj1061【NOI2008】志愿者招募
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 2740 Solved: 1703 [Submit][id ...
- BZOJ1061:[NOI2008]志愿者招募——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://www.luogu.org/problemnew/show/P3980 申奥 ...
- 【bzoj1061】[NOI2008]志愿者招募 线性规划与费用流
题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...
- 【bzoj1061】 Noi2008—志愿者招募
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 (题目链接) 题意 给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l, ...
- BZOJ 3265: 志愿者招募加强版 [单纯形法]
传送门 一个人多段区间,一样.... 不过国家队论文上说这道题好像不能保证整数解.... #include <iostream> #include <cstdio> #incl ...
- BZOJ.1061.[NOI2008]志愿者招募(线性规划 对偶原理 单纯形 / 费用流SPFA)
题目链接 线性规划 用\(A_{ij}=0/1\)表示第\(i\)天\(j\)类志愿者能否被招募,\(x_i\)为\(i\)类志愿者招募了多少人,\(need_i\)表示第\(i\)天需要多少人,\( ...
- 《小白的CFD之旅》招募写手
<小白的CFD之旅>系列招募写手. 由于工作繁忙,<小白的CFD之旅>系列更新缓慢,现招募志愿者写手.这是一个分享平台,欢迎各位愿意分享自己CFD学习经历的朋友们. <小 ...
- 招募贴:Hadoop专业解决方案招募义务翻译人员
一.招募启事 招募贴:Hadoop专业解决方案招募义务翻译人员,英文原著名称:<Wrox.Professional.Hadoop.Solutions>.愿意参与到此项工作中来的请加群:31 ...
随机推荐
- C#拦截系统消息的方法-Application.AddMessageFilter
C#拦截系统消息的方法Application.AddMessageFilter Application.AddMessageFilter这个方法可以接收系统发出的消息: 首先定义一个类,继承IMess ...
- ElasticSearch的按日期排序问题
ES中有一个sort域,类型为date,格式是: yyyy-MM-dd HH:mm:ss 但是,在实际应用中,想仅仅按yyyy-MM-dd排序.我的处理过程是,用es的script,提取出日期,然后按 ...
- 转: Eclispe的远程开发
from: http://www.thinksaas.cn/topics/0/528/528009.html 新项目中用到了所谓的Eclipse远程开发.参考: http://www.eclipse. ...
- Linux服务器大量向外发包问题排查
最近Linux redhat 6.5 APP 业务系统,向外大量发送流量,不断建立tcp连接,目标地址是美国的一个IP,估计被当成肉鸡了,比较悲惨,直接飞向IDC机房,防火墙显示这个APP服务器tcp ...
- 仿新浪首页、主题、详情页,纯html静态页面
仿新浪首页.主题.详情页.纯html静态页面,下载地址: http://download.csdn.net/detail/sweetsuzyhyf/8085535
- TCP/IP详解 卷一(第二十章 TCP的成块数据流)
本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...
- JAVA静态导入(inport static)详解
在Java 5中,import语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的.这种新的特性成为静态导入. 当你想使用static成员时,可以使用静态导入( ...
- centOS7安装RabbitMQ及python实例
1.rabbitmq是有erlang开发的,所以首先要先安装erlang rpm -ivh erlang-18.1-1.el7.centos.x86_64.rpm rpm -ivh rabbitmq- ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- C# readonly和const的不同以及它的具体用法
在C#中,我们用const来定义常量.常量就是我定义一个变量,这个变量的值在整个软件的生命周期都不变.比如我想求一个圆形的面积,我就可以把π定义成一个常量,因为我事先知道圆周率是就是3.1415926 ...