BZOJ 3550 [ONTAK2010]Vacation 线性规划
来源:互联网 发布:淘宝国际快递转运 编辑:程序博客网 时间:2024/06/06 05:43
题意:链接
方法:线性规划
解析:
这是一道蛮简单的单纯性线性规划。
首先我们设Xi 表示第i个数是否选择。
则显然
X1+X2+...+Xn<=k
X2+X3...+Xn+1<=k
…
X2n+1+X2n+2+...+X3n<=k
其次0<=Xi<=1
并且我们要最大化∑3ni=1Ci∗Xi
观察如上式子,显然为标准型线性规划。
单纯性出解即OK。
解这些玩意的复杂度是多少呢?
如果您观察代码的话,亦或是理解了整个过程。
在消限制的时候显然是O(nm)的
但是我们在枚举目标函数中系数大于零的变量的时候,最坏的枚举量是O(n)。
所以这东西最坏差不多达到O(n^2*m),似乎和网络流有点接近?
所以哪个更快呢?也许哪天想不开了试试也行哇。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 610#define INF 0x7f7f7f7fusing namespace std;double a[N<<1][N<<1];int n,k,tot;int check(){ for(int i=1;i<=3*n;i++) if(a[0][i]>0)return i; return 0;}void Simplex(){ while(int t=check()) { double limit=INF; int choseline; for(int i=1;i<=tot;i++) { if(a[i][t]<=0)continue; else if(a[i][0]/a[i][t]<limit){limit=a[i][0]/a[i][t];choseline=i;} } if(limit==INF){a[0][0]=INF;break;} double di=a[choseline][t]; for(int i=0;i<=3*n;i++) { if(i==t)a[choseline][i]/=di; a[choseline][i]/=di; } for(int i=0;i<=tot;i++) { if(i==choseline||a[i][t]==0)continue; if(i==0)a[i][0]+=a[choseline][0]*a[i][t]; else a[i][0]-=a[choseline][0]*a[i][t]; double l=a[i][t]; for(int j=1;j<=3*n;j++) { if(j==t)a[i][j]=-l*a[choseline][j]; else a[i][j]-=l*a[choseline][j]; } } }}int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=2*n+1;i++) { int to=i+n-1; tot++; for(int j=i;j<=to;j++) a[tot][j]=1; a[tot][0]=k; } for(int i=1;i<=3*n;i++) { tot++; a[tot][i]=1,a[tot][0]=1; } for(int i=1;i<=3*n;i++) scanf("%lf",&a[0][i]); Simplex(); printf("%.0lf\n",a[0][0]);}
0 0
- BZOJ 3550 [ONTAK2010]Vacation 线性规划
- BZOJ 3550 ONTAK2010 Vacation 线性规划转费用流
- BZOJ 3550 ONTAK2010 Vacation 单纯形
- bzoj 3550: [ONTAK2010]Vacation (单纯形)
- bzoj 3550: [ONTAK2010]Vacation 单纯形
- 【BZOJ3550】【ONTAK2010】 Vacation 线性规划转费用流
- [bzoj3550][单纯形][线性规划][ONTAK2010]Vacation
- [BZOJ3550][ONTAK2010]Vacation
- bzoj3550【ONTAK2010】Vacation
- bzoj3550[ONTAK2010] Vacation
- BZOJ 3550 Vacation 单纯形 费用流
- [BZOJ3550][ONTAK2010]Vacation(单纯形)
- 【bzoj 3543】: [ONTAK2010]Garden
- BZOJ 3545 [ONTAK2010] Peaks
- BZOJ 3543: [ONTAK2010]Garden 题解
- bzoj 1283(线性规划)
- 【BZOJ】【P3543】【ONTAK2010】【Garden】【题解】【乱搞】
- BZOJ 3545 ONTAK2010 Peaks Treap启发式合并
- 【shell脚本练习】判断用户存在和用户类型
- 《Java设计模式》之命令模式
- ODOO8 Sale模块实施的按钮权限更改
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- Mysql Linux数据目录变更迁移
- BZOJ 3550 [ONTAK2010]Vacation 线性规划
- 九度oj 1119
- c++学习笔记(三)多态性
- unity3D中脚本生命周期
- Gym 100490A-A - Approximation-数学
- linux命令
- day7: 类的扩展 NSDate NSDateFormatter Category Extension延展 Protocol协议 delegate代理
- android Listview,gridview局部刷新,部分刷新
- bzoj-3118 Orz the MST