bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)
直接暴力把线性规划矩阵给打出来然后单纯形求解就行了
简单来说就是每个数记一个\(d_i\)表示选或不选,那么就是最大化\(\sum d_ic_i\),并满足一堆限制条件
然后不要忘记限制每个数最多选一次
(据说还可以费用流然而实在不会啊……)
//minamoto
#include<bits/stdc++.h>
#define R register
#define inf 1e18
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
    R int res,f=1;R char ch;
    while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
    for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
    return res*f;
}
const int N=2005;const double eps=1e-8;
double a[N][N];int n,k,m;
void pivot(int l,int e){
    double t=a[l][e];a[l][e]=1;fp(i,0,m)a[l][i]/=t;
    fp(i,0,n)if(i!=l&&fabs(a[i][e])>eps){
        t=a[i][e],a[i][e]=0;
        fp(j,0,m)a[i][j]-=t*a[l][j];
    }
}
void simplex(){
    while(true){
        int l=0,e=0;double mn=inf;
        fp(i,1,m)if(a[0][i]>eps){e=i;break;}if(!e)break;
        fp(i,1,n)if(a[i][e]>eps&&a[i][0]/a[i][e]<mn)mn=a[i][0]/a[i][e],l=i;
        pivot(l,e);
    }
}
int main(){
//  freopen("testdata.in","r",stdin);
    n=read(),k=read();fp(i,1,n*3)a[0][i]=read();
    fp(i,1,n*3)a[i][i]=a[i][0]=1;
    fp(i,1,n*2+1){
        fp(j,0,n-1)a[i+n*3][i+j]=1;
        a[i+n*3][0]=k;
    }m=3*n,n=5*n+1;simplex();
    printf("%d\n",(int)(-a[0][0]+0.5));return 0;
}
bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)的更多相关文章
- BZOJ3550: [ONTAK2010]Vacation
		3550: [ONTAK2010]Vacation Time Limit: 10 Sec Memory Limit: 96 MBSubmit: 91 Solved: 71[Submit][Stat ... 
- bzoj3550: [ONTAK2010]Vacation&&bzoj3112: [Zjoi2013]防守战线
		学了下单纯形法解线性规划 看起来好像并不是特别难,第二个code有注释.我还有...*=-....这个不是特别懂 第一个是正常的,第二个是解对偶问题的 #include<cstdio> # ... 
- BZOJ3550 [ONTAK2010]Vacation  【单纯形】
		题目链接 BZOJ3550 题解 单纯形裸题 题意不清,每个位置最多选一次 #include<algorithm> #include<iostream> #include< ... 
- BZOJ 3550: [ONTAK2010]Vacation [单纯形法]
		有3N个数,你需要选出一些数,首先保证任意长度为N的区间中选出的数的个数<=K个,其次要保证选出的数的个数最大. 好像都是费用流... 单纯性裸题呀... 注意每个数最多选1次 #include ... 
- BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划
		BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得 ... 
- 【BZOJ1283/3550】序列/[ONTAK2010]Vacation 最大费用流
		[BZOJ1283]序列 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为 的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和 ... 
- BZOJ 3550 ONTAK2010 Vacation 单纯形
		题目大意:给定一个长度为3n的区间.要求选一些数,且随意一段长度为n的区间内最多选k个数.求选择数的和的最大值 单纯形直接搞 注意一个数仅仅能被选一次 因此要加上xi<=1这个约束条件 不明确3 ... 
- 【Richard 的刷(水)题记录】
		大概想了想,还是有个记录比较好. 9/24 网络流一日游: 最大流:bzoj1711[Usaco2007 Open]Dining 拆点 BZOJ 3993 Sdoi2015 星际战争 二分 P.S.这 ... 
- 【BZOJ】【3550】【ONTAK2010】Vacation
		网络流/费用流 Orz太神犇了这题…… 我一开始想成跟Intervals那题一样了……每个数a[i]相当于覆盖了(a[i]-n,a[i]+n)这个区间……但是这样是错的!!随便就找出反例了……我居然还 ... 
随机推荐
- 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)
			http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ... 
- P1359 租用游艇   洛谷
			https://www.luogu.org/problem/show?pid=1359 题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇,并在下游的 ... 
- bzoj4161 (k^2logn求线性递推式)
			分析: 我们可以写把转移矩阵A写出来,然后求一下它的特征多项式,经过手动计算应该是这样的p(x)=$x^k-\sum\limits_{i=1}^ka_i*x^{k-i}$ 根据Cayley-Hamil ... 
- Mysql数据库的事物
			一 .事物的特性:ACID 数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性).Consistensy(一致性).Isolation(隔离型)和Durability(持久性) ... 
- eclipse提速01 - 禁用不常用的eclipse启动插件
			会不断更新,需要的收藏 禁用不常用的eclipse启动插件(当然如果不需要可以卸载) 
- HashMap、HashTable、TreeMap 深入分析及源代码解析
			在Java的集合中Map接口的实现实例中用的比較多的就是HashMap.今天我们一起来学学HashMap,顺便学学和他有关联的HashTable.TreeMap 在写文章的时候各种问题搞得我有点迷糊尤 ... 
- android POI搜索,附近搜索,周边搜索定位介绍
			POI搜索有三种方式.依据范围和检索词发起范围检索poiSearchInbounds.城市poi检索poiSearchInCity,周边检索poiSearchNearBy. 下以周边检索为例介绍怎样进 ... 
- C# 谁改了我的代码        使用 Resharper 快速做适配器
			C# 谁改了我的代码 本文告诉大家一个特殊的做法,可以修改一个字符串常量 我们来写一个简单的程序,把一个常量字符串输出 private const string str = "linde ... 
- js和jquery实现回到顶层
			js <!DOCTYPE html> <html> <head> <title>返回顶部</title> <style> bod ... 
- 【leetcode】Word Break(python)
			思路是这种.我们从第一个字符開始向后依次找,直到找到一个断句的地方,使得当前获得的子串在dict中,若找到最后都没找到.那么就是False了. 在找到第一个后,接下来找下一个断句处,当然是从第一个断句 ... 
