记录编号 402008 评测结果 AAAAAAAAAA
题目名称 [NOI 2008]志愿者招募 最终得分 100
用户昵称 GravatarAAAAAAAAAA 是否通过 通过
代码语言 C++ 运行时间 0.424 s
提交时间 2017-05-04 20:03:37 内存使用 31.02 MiB
显示代码纯文本
#include<cmath>
#include<cstdio>
#define EPS 1e-10
#define INF 1e10
#define MAXM 10010
#define MAXN 1010
using namespace std;
namespace IO{
	char buf[1<<15],*fs,*ft;
	inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
	inline int qr(){
		int x=0,rev=0,ch=gc();
		while(ch<'0'||ch>'9'){if(ch=='-')rev=1;ch=gc();}
		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=gc();}
		return rev?-x:x;}
}using namespace IO;
/*******************************************************************************************************/
int N,M;
double ans=0,c[MAXN],a[MAXM][MAXN],b[MAXM];
void Pivot(int l,int e){
	b[l]/=a[l][e];
	for(int i=1;i<=N;i++){if(i!=e){a[l][i]/=a[l][e];}}
	a[l][e]=1.0/a[l][e];
	for(int i=1;i<=M;i++){
		if(i!=l&&fabs(a[i][e])>EPS){
			b[i]-=a[i][e]*b[l];
			for(int 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];}}
	ans+=c[e]*b[l];
	for(int i=1;i<=N;i++){if(i!=e){c[i]-=a[l][i]*c[e];}}
	c[e]=-c[e]*a[l][e];}
double Simplex(){
	int j,l,e;
	double ret;
	while(1){
		for(j=1;j<=N;j++){if(c[j]>EPS)break;}
		if(j==N+1)return ans;
		e=j;ret=INF;
		for(int i=1;i<=M;i++){
			if(a[i][e]>EPS&&ret>b[i]/a[i][e]){
				ret=b[i]/a[i][e];l=i;}}
		if(ret==INF)return INF;
		Pivot(l,e);}
	return INF;}
int sb(){
	freopen("employee.in","r",stdin);
	freopen("employee.out","w",stdout);
	N=qr();M=qr();
	int s,t;
	for(int i=1;i<=N;i++){c[i]=qr()*1.0;}
	for(int i=1;i<=M;i++){
		s=qr();t=qr();b[i]=qr()*1.0;
		for(int j=s;j<=t;j++){
			a[i][j]=1;}}
	printf("%d",(int)Simplex());
	return 0;}
int chh=sb();
int main(){;}