数学(线性规划): ZJOI2013 防守战线
2016-06-24 22:44
288 查看
偷懒用的线性规划。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxr=1010; const int maxc=10010; int n,m,nxt[maxc]; int a[maxr][maxc]; void Pivot(int l,int e){ int pre=maxc-1; for(int i=0;i<=n;i++) if(a[l][i]!=0){nxt[pre]=i;pre=i;} nxt[pre]=-1; for(int i=0,t;i<=m;i++) if(i!=l&&(t=a[i][e])){ a[i][e]=0; for(int j=nxt[maxc-1];j!=-1;j=nxt[j]) a[i][j]+=t*a[l][j]; } } void Simplex(){ while(true){ int e=0,l=0; for(int i=1;i<=n;i++) if(a[0][i]>0){e=i;break;} if(e==0)break; for(int i=1;i<=m;i++) if(a[i][e]<0&&(!l||a[l][0]>a[i][0])) {l=i;} Pivot(l,e); } } int main(){ #ifndef ONLINE_JUDGE freopen("zjoi13_defend.in","r",stdin); freopen("zjoi13_defend.out","w",stdout); #endif scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) scanf("%d",&a[i][0]); for(int i=1,l,r,t;i<=n;i++){ scanf("%d%d%d",&l,&r,&t); for(int j=l;j<=r;j++) a[j][i]=-1; a[0][i]=t; } Simplex(); printf("%d\n",a[0][0]); return 0; }
相关文章推荐
- 转机
- Controller层的写法
- 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError
- 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError
- 常用的SQL语句
- 53. spring boot系列合集【从零开始学Spring Boot】
- 你真的知道为什么不推荐使用@import?
- node.js:怎样同时执行多条SQLs,且只有一个回调
- 条件编译#ifdef的妙用详解_透彻
- springmvc注解开发-validation校验-商品修改校验
- hibernate关系映射
- 网络中MTU与MSS
- MVC与MVVM设计模式理解
- jsp: ServletContext
- hb_gui 启动报错 RuntimeError: could not open display
- apt-get 与 yum的区别 (转)
- leetcode 数独:维持三个矩阵,行,列,块 出现过的置为一,初始化为0.注意block的行的转换
- docker 学习笔记1——安装与相关概念
- 阅读程序3
- MySQL 一致性读 深入研究 digdeep博客学习