数学(线性规划): 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 防守战线的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3112 [Zjoi2013]防守战线

bzoj3112: [Zjoi2013]防守战线

bzoj3550: [ONTAK2010]Vacation&&bzoj3112: [Zjoi2013]防守战线

[ZJOI2013]防守战线

BZOJ3112 [ZJOI2013]防守战线

BZOJ 3112: [Zjoi2013]防守战线 [单纯形法]