建图细节比较多,对于每个点i,拆成i和i',i表示用的餐巾,i'表示脏餐巾,连接:

(s,i,r[i],p)表示在这一天买新餐巾

(i,t,r[i],0)表示这一天用了r[i]的餐巾

(s,i+n,r[i],0)表示这一天有r[i]条脏餐巾

if(i+ft<=n) ins(i+n,i+ft,inf,fp)注意特判,表示送去快洗,inf是因为这一天的脏餐巾不止这一天剩下的,还有之前剩下的

if(i+st<=n) ins(i+n,i+st,inf,sp)注意特判,表示送去慢洗,inf是因为这一天的脏餐巾不止这一天剩下的,还有之前剩下的

if(i<n) ins(i+n,i+n+1,inf,0)注意特判,表示这一天的脏餐巾剩到第二天

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const long long N=5005,inf=1e18;
long long n,p,ft,fp,st,sp,h[N],cnt=1,fr[N],dis[N],s,t,r[N],ans;
bool v[N];
struct qwe
{
long long ne,no,to,va,w;
}e[N*20];
long long read()
{
long long r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(long long u,long long v,long long c,long long w)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
e[cnt].va=c;
e[cnt].w=w;
h[u]=cnt;
}
void ins(long long u,long long v,long long c,long long w)
{
add(u,v,c,w);
add(v,u,0,-w);
}
bool spfa()
{
memset(v,0,sizeof(v));
queue<long long>q;
for(long long i=s;i<=t;i++)
dis[i]=inf;
dis[s]=0;
v[s]=1;
q.push(s);
while(!q.empty())
{
long long u=q.front();
q.pop();
v[u]=0;
for(long long i=h[u];i;i=e[i].ne)
if(e[i].va>0&&dis[e[i].to]>dis[u]+e[i].w)
{
dis[e[i].to]=dis[u]+e[i].w;
fr[e[i].to]=i;
if(!v[e[i].to])
{
v[e[i].to]=1;
q.push(e[i].to);
}
}
}
return dis[t]!=inf;
}
void mcf()
{
long long x=inf;
for(long long i=fr[t];i;i=fr[e[i].no])
x=min(x,e[i].va);
for(long long i=fr[t];i;i=fr[e[i].no])
{
e[i].va-=x;
e[i^1].va+=x;
ans+=x*e[i].w;
}
}
int main()
{
n=read();
s=0,t=2*n+1;
for(long long i=1;i<=n;i++)
r[i]=read();
p=read(),ft=read(),fp=read(),st=read(),sp=read();
for(long long i=1;i<=n;i++)
{
ins(s,i,r[i],p);
ins(i,t,r[i],0);
ins(s,i+n,r[i],0);
if(i+ft<=n)
ins(i+n,i+ft,inf,fp);
if(i+st<=n)
ins(i+n,i+st,inf,sp);
if(i<n)
ins(i+n,i+n+1,inf,0);
}
while(spfa())
mcf();
printf("%lld\n",ans);
return 0;
}

最新文章

  1. TiQuery
  2. Jq基础简介
  3. 在eclipse上跑hadoop的helloworld
  4. MySQL 表与字段编码格式报错
  5. OpenGL 学习
  6. COOKIE之安全设置漫谈
  7. linux 下编译安装php
  8. request.getParamer()
  9. 微软RDLC报表打印
  10. 洛谷 P1078 文化之旅
  11. 使用asyncio实现redis客户端
  12. MulticastSocket 使用
  13. github收藏夹
  14. C# 消息队列 RabbitMQ
  15. MySQL 如何查看表的存储引擎
  16. 寒假特训——搜索——H - Nephren gives a riddle
  17. CORS(Cross-origin resource sharing) “跨域资源共享”
  18. windows MYSQL 安装及修改root密码
  19. 天地图api地址
  20. Linux下使用Nexus搭建Maven私服

热门文章

  1. python学习之-- 协程
  2. UVA 10200 Prime Time【暴力,精度】
  3. 个人网站开发***云服务器+Linux+域名***
  4. 多硬盘分区管理fdisk
  5. 纠结的链接——ln、ln -s、fs.symlink、require
  6. Python 之 读取txt文件
  7. Windows server 2003 + IIS6 搭建Asp.net MVC执行环境
  8. Coding Ninja 修炼笔记 (1)
  9. Java SE之break和continue标签
  10. flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方式