luoguP1315 观光公交 题解(NOIP2011)(贪心)
2024-09-05 16:32:31
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctime>
#include<queue>
#include<stack>
#define rg register
#define lst long long
#define N 1050
#define M 10050
using namespace std; int n,m,k,num[N],u,v,w;
int down[N],up[N],ans;
int arrive[N],peo[N];
int val,idx; inline int read()
{
rg int s=,m=;rg char ch=getchar();
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')m=-,ch=getchar();
while(ch>=''&&ch<='')s=(s<<)+(s<<)+ch-'',ch=getchar();
return s*m;
} int main()
{
// freopen("s.in","r",stdin);
n=read(),m=read(),k=read();
for(rg int i=;i<n;++i)num[i]=read();
for(rg int i=;i<=m;++i)
{
u=read(),v=read(),w=read();
ans-=u,down[w]++,up[v]=max(u,up[v]);
}
while(k--)
{
memset(peo,,sizeof(peo));
for(rg int i=;i<=n;++i)
arrive[i]=max(arrive[i-],up[i-])+num[i-];
for(rg int i=n;i>=;--i)
{
if(num[i-])
{
peo[i-]=down[i];
if(arrive[i]>up[i])
peo[i-]+=peo[i];
}
else peo[i-]=;
}
val=,idx=-;
for(rg int i=;i<=n;++i)
if(val<peo[i])val=peo[i],idx=i;
if(idx==-)break;
num[idx]--;
}
for(rg int i=;i<=n;++i)
arrive[i]=max(arrive[i-],up[i-])+num[i-];
for(rg int i=;i<=n;++i)ans+=arrive[i]*down[i];
printf("%d\n",ans);
return ;
}
最新文章
- JS处理四舍五入函数 toFixed(n)(可取小数点后n位)
- css样式reset
- DP:Sumsets(POJ 2229)
- JAVA中“==”与equals()方法区别
- Go语言Revel框架 环境搭建
- Android网络请求心路历程
- (转)dedecms入门
- 使用shell命令分析统计日志
- Sky数 2097
- asp.net 基础
- python 函数运算先于单目运算
- 【Leecode】两数之和
- 计算n的阶乘有多少个尾随零
- UVa 11427 Expect the Expected (数学期望 + 概率DP)
- Linux 并发链接数
- Mybatis源码分析之SqlSession和Excutor(二)
- The Air Jordan 11 Gym Red will be available December 9
- 1016 Phone Bills (25 分)
- UILabel 自适应高度,宽度
- java设计模式——多例模式