BZOJ 3112([Zjoi2013]防守战线-单纯形)
来源:互联网 发布:生产者消费者模式java 编辑:程序博客网 时间:2024/04/29 20:23
战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算。有m 个区间[L1, R1], [L2, R2], …, [Lm, Rm],在第i 个区间的范围内要建至少Di 座塔。求最少花费。
简单的模板题
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} int m,n;#define EPS (1E-7)#define MAXM (1000+10)#define MAXN (10000+10)namespace Linear_Programming{ double A[MAXM][MAXN],b[MAXM],c[MAXN],v; void Pivot(int l,int e) { int i,j; b[l]/=A[l][e]; for(i=1;i<=n;i++) if(i!=e) A[l][i]/=A[l][e]; A[l][e]=1/A[l][e]; for(i=1;i<=m;i++) if(i!=l&&fabs(A[i][e])>EPS) { b[i]-=A[i][e]*b[l]; for(j=1;j<=n;j++) if(j!=e) A[i][j]-=A[i][e]*A[l][j]; A[i][e]=-A[i][e]*A[l][e]; } v+=c[e]*b[l]; for(i=1;i<=n;i++) if(i!=e) c[i]-=c[e]*A[l][i]; c[e]=-c[e]*A[l][e]; } double Simplex() { int i,l,e; while(1) { for(i=1;i<=n;i++) if(c[i]>EPS) break; if((e=i)==n+1) return v; double temp=INF; for(i=1;i<=m;i++) if( A[i][e]>EPS && b[i]/A[i][e]<temp ) temp=b[i]/A[i][e],l=i; if(temp==INF) return INF; Pivot(l,e); } } } /*input: n=±äÔªÊý m=·½³ÌÊýAx<=b x>=0 Çómin(Cx)Ax>=b x>=0 Çómax(Cx)?AתÖã¬b,c½»»» n,m½»»»È»ºóÕÕ×ö¾ÍÐÐ */int main(){// freopen("bzoj3112.in","r",stdin);// freopen(".out","w",stdout); using namespace Linear_Programming; m=read(),n=read(); For(i,m) { scanf("%lf",&b[i]); } For(i,n) { int x=read(),y=read(),z=read(); for(int j=x;j<=y;j++) A[j][i]=1; c[i]=z; } double ans=Simplex(); printf("%d\n",int(ans+0.5)); return 0;}
阅读全文
0 0
- BZOJ 3112 Zjoi2013 防守战线 单纯形
- bzoj 3112: [Zjoi2013]防守战线 单纯形
- bzoj 3112: [Zjoi2013]防守战线 单纯形
- [BZOJ 3112][Zjoi2013]防守战线:单纯形
- BZOJ 3112([Zjoi2013]防守战线-单纯形)
- bzoj 3112: [Zjoi2013]防守战线 (单纯形)
- 线性规划单纯型法(bzoj 3112: [Zjoi2013]防守战线)
- BZOJ 3265 志愿者招募(BZOJ 1061)加强版 && BZOJ 3112 [Zjoi2013]防守战线 单纯形
- BZOJ 3112 [Zjoi2013]防守战线
- [单纯形 || 差分费用流 || 辅助变量费用流] BZOJ 3112 [Zjoi2013]防守战线
- [BZOJ3112][ZJOI2013]防守战线(单纯形)
- BZOJ 3112 [Zjoi2013]防守战线 线性规划
- 【BZOJ3112】防守战线(ZJOI2013)-单纯形法+对偶理论
- 【差分+费用流|单纯形】BZOJ3112 [Zjoi2013]防守战线
- [LP对偶费用流] BZOJ 3112 [Zjoi2013]防守战线
- BZOJ 3112 防守战线
- [BZOJ3112][Zjoi2013]防守战线
- 【BZOJ3112】[ZJOI2013]防守战线
- 13.springboot整合rabbitmq
- django的一个坑
- HDU 1163 Eddy's digital Roots 【快速幂+同于定理 || 余九定理】
- 静态语句块、构造语句块(也叫构造器)、非静态语块以及构造函数的执行顺序。
- 展望2018
- BZOJ 3112([Zjoi2013]防守战线-单纯形)
- 设计模式讲解与代码实践(二十四)——访问者
- 生成对抗网络(GAN,Generative Adversarial Networks) 学习笔记
- python语言简介
- 使用bs4爬取链家网的二手房信息
- ubuntu 下安装memcache 以及php扩展
- 启动Memcached报错:/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-2.1
- 使用NSIS制作安装包
- maven全解