数学(线性规划): ZJOI2013 防守战线
Posted 既然选择了远方,便只顾风雨兼程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学(线性规划): ZJOI2013 防守战线相关的知识,希望对你有一定的参考价值。
偷懒用的线性规划。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 const int maxr=1010; 6 const int maxc=10010; 7 8 int n,m,nxt[maxc]; 9 int a[maxr][maxc]; 10 11 12 void Pivot(int l,int e){ 13 int pre=maxc-1; 14 for(int i=0;i<=n;i++) 15 if(a[l][i]!=0){nxt[pre]=i;pre=i;} 16 nxt[pre]=-1; 17 18 for(int i=0,t;i<=m;i++) 19 if(i!=l&&(t=a[i][e])){ 20 a[i][e]=0; 21 for(int j=nxt[maxc-1];j!=-1;j=nxt[j]) 22 a[i][j]+=t*a[l][j]; 23 } 24 } 25 26 void Simplex(){ 27 while(true){ 28 int e=0,l=0; 29 for(int i=1;i<=n;i++) 30 if(a[0][i]>0){e=i;break;} 31 if(e==0)break; 32 for(int i=1;i<=m;i++) 33 if(a[i][e]<0&&(!l||a[l][0]>a[i][0])) 34 {l=i;} 35 36 Pivot(l,e); 37 } 38 } 39 40 int main(){ 41 #ifndef ONLINE_JUDGE 42 freopen("zjoi13_defend.in","r",stdin); 43 freopen("zjoi13_defend.out","w",stdout); 44 #endif 45 scanf("%d%d",&m,&n); 46 for(int i=1;i<=m;i++) 47 scanf("%d",&a[i][0]); 48 for(int i=1,l,r,t;i<=n;i++){ 49 scanf("%d%d%d",&l,&r,&t); 50 for(int j=l;j<=r;j++) 51 a[j][i]=-1; 52 a[0][i]=t; 53 } 54 Simplex(); 55 printf("%d\n",a[0][0]); 56 return 0; 57 }
以上是关于数学(线性规划): ZJOI2013 防守战线的主要内容,如果未能解决你的问题,请参考以下文章