zoukankan      html  css  js  c++  java
  • 数学(线性规划): 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
    ",a[0][0]);
    56     return 0;    
    57 }
  • 相关阅读:
    设计模式(十):Decorator装饰者模式 -- 结构型模式
    设计模式(九):Composite组合模式 -- 结构型模式
    Anagrams
    Gas Station
    Unique Binary Search Trees II
    Trapping Rain Water
    4Sum
    3Sum Closest
    3Sum
    Longest Valid Parentheses
  • 原文地址:https://www.cnblogs.com/TenderRun/p/5615510.html
Copyright © 2011-2022 走看看