UVA11613 Acme Corproation 生产销售计划

题目大意

A公司生产一种元素,给出该元素在未来M个月中每个月的单位售价,最大生产量,生产成本,最大销售量和最大存储时间,和每月存储代价,问这家公司在M个月内所能赚大的最大利润(题意来源:http://blog.csdn.net/l123012013048/article/details/47962965)

题解

每个月拆成两个点,用于表示存储。S向X集合点连生产成本,X集合向Y集合连存储成本,Y集合向T连收益。

跑最小费用流。不要求最大流。

不(书)难(上)发(写)现(道),d[T]随着增广会逐渐增大,于是等d[T] >= 0,就不要继续增广了。此时得到的就是最小费用流。

第一次WA了,接着我同时完成如下事情:开大空间、变longlong、上网看输出格式有没有多空格换行……

然后A了

做UVA时间久了

踩过的坑多了去了

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
inline long long max(long long a, long long b){return a > b ? a : b;}
inline long long min(long long a, long long b){return a < b ? a : b;}
inline long long abs(long long x){return x < 0 ? -x : x;}
inline void swap(long long &x, long long &y){long long tmp = x;x = y;y = tmp;}
inline void read(long long &x)
{
x = 0;char ch = getchar(), c = ch;
while(ch < '0' || ch > '9') c = ch, ch = getchar();
while(ch <= '9' && ch >= '0') x = x * 10 + ch - '0', ch = getchar();
if(c == '-') x = -x;
}
const long long INF = 0x3f3f3f3f3f3f3f3f;
struct Edge
{
long long u,v,w,c,nxt;
Edge(long long _u, long long _v, long long _w, long long _c, long long _nxt){u = _u;v = _v;w = _w;c = _c;nxt = _nxt;}
Edge(){}
}edge[1000010];
long long head[1000010], cnt = 1, S, T, q[1000010], he, ta, d[1000010], vis[1000010], from[1000010], ans;
inline void insert(long long a, long long b, long long c, long long d)
{
edge[++ cnt] = Edge(a, b, c, d, head[a]), head[a] = cnt;
edge[++ cnt] = Edge(b, a, 0, -d, head[b]), head[b] = cnt;
}
bool spfa()
{
memset(d, 0x3f, sizeof(d)), d[S] = 0, he = 0, ta = 1, q[0] = S, vis[S] = 1;
while(he < ta)
{
long long now = q[he ++];if(he > 1000000) he = 0;
for(long long pos = head[now];pos;pos = edge[pos].nxt)
{
long long v = edge[pos].v;
if(edge[pos].w && d[v] > d[now] + edge[pos].c)
{
d[v] = d[now] + edge[pos].c, from[v] = pos;
if(!vis[v])
{
q[ta ++] = v;
if(ta > 1000000) ta = 0;
}
}
}
vis[now] = 0;
}
return d[T] != INF;
}
long long flow()
{
long long mi = INF;
for(long long i = from[T];i;i = from[edge[i].u]) mi = min(mi, edge[i].w);
for(long long i = from[T];i;i = from[edge[i].u]) edge[i].w -= mi, edge[i ^ 1].w += mi, ans += edge[i].c * mi;
}
void mcf()
{
while(spfa())
{
if(d[T] >= 0) return;
flow();
}
}
long long t, n, c, cb[10000], cl[10000], dj[10000], masl[10000], mat[10000];
//n:月数
//c:存每个单位放一个月的代价
//cb[i]:每单元生产成本
//cl[i]:最大产量
//dj[i]:销售单价
//masl[i]:最大销售量
//mat[i]:储存最大时间
int main()
{
read(t);
S = 1000000, T = S + 1;
for(long long ca = 1;ca <= t;++ ca)
{
cnt = 1, ans = 0, memset(head, 0, sizeof(head));
read(n), read(c);
for(long long i = 1;i <= n;++ i)
{
read(cb[i]), read(cl[i]), read(dj[i]), read(masl[i]), read(mat[i]);
insert(S, i, cl[i], cb[i]);
insert(n + i, T, masl[i], - dj[i]);
}
for(long long i = 1;i <= n;++ i)
for(long long k = 0, j = i + k;k <= mat[i] && j <= n;++ k, ++ j)
insert(i, n + j, INF, c * k);
mcf();
printf("Case %lld: %lld\n", ca, -ans);
}
return 0;
}

UVA11613 Acme Corproation的更多相关文章

  1. UVA11613 Acme Corporation —— 最小费用流(流量不固定的最小费用流)

    题目链接:https://vjudge.net/problem/UVA-11613 题意: 商品X在第i个月内:生产一件需要花费mi元,最多可生产ni件,销售一件(在这个月内销售,而不管它是在那个月生 ...

  2. UVa11613 Acme Corporation(最小费用流)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33452 [思路] 最小费用流. 构图: 1 每个月建立2个点,建立 ...

  3. UVA-11613 Acme Corporation (最大费用最大流+拆点)

    题目大意:有一种商品X,其每每单位存放一个月的代价I固定.并且已知其每月的最大生产量.生产每单位的的代价.最大销售量和销售单价,还已知每个月生产的X能最多能存放的时间(以月为单位).问只考虑前m个月, ...

  4. Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负

    /** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...

  5. 安装VC6提示找不到ACME时的解决办法

    将安装程序COPY到电脑上1.打开setupwiz.ini,把"acme=acmboot.exe"改为"=acmsetup.exe";2.STF=setup/v ...

  6. minihttp http://www.acme.com/software/mini_httpd/

    1.安装mini_httpd 1.1把下载的mini_httpd-1.19.tar.gz拷贝到根目录   1.2 解压tar -xvfzmini_httpd-1.19.tar.gz ,会在根目录产生一 ...

  7. debian8下acme nginx 部署记录

    1.更新源 apt update 2.安装curl git apt install curl git -y 3.克隆acme仓库 curl https://get.acme.sh | sh git c ...

  8. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  9. Linux下使用acme.sh 配置https 免费证书

    acme.sh 简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书.acme.sh 有以下特点:一个纯粹用Shell(Unix shell)语言编写的 ...

随机推荐

  1. svn+post-commit实现自动部署(转)

    一.安装 #yum install subversion 检查是否安装了svn #subversion –v 创建svn库和对应的目录 #mkdir /svn/www.test.com #svnadm ...

  2. JS数组 组团(如何创建数组)var mychar = new Array( )

    组团,并给团取个名(如何创建数组) 使用数组之前首先要创建,而且需要把数组本身赋至一个变量.好比我们出游,要组团,并给团定个名字"云南之旅". 创建数组语法: var myarra ...

  3. Android开发 ShapeDrawable详解

    前言 ShapeDrawable一开始我以为它是对应xml文件属性里的shape的画图,后来发现我错了... 其实ShapeDrawable更像是一共自由度更大跟偏向与实现draw()方法的一共图像绘 ...

  4. java系统监控分析Jprofile下载及安装配置【转】

    JProfiler是一个全功能的Java剖析工具(profiler),专用於分析J2SE和J2EE应用程式.它把CPU.线程和记忆体的剖析组合在一个强大的应用中.JProfiler可提供许多IDE整合 ...

  5. 动态设置背景图片,class,style

    1.动态设置背景图片<div v-if='img ' :style="{background: 'url('+ img +')',backgroundSize:cover }" ...

  6. COMMENT方法 用于在生成的SQL语句中添加注释内容,

    COMMENT方法 用于在生成的SQL语句中添加注释内容,例如: $this->comment('查询考试前十名分数') ->field('username,score') ->li ...

  7. linux 软件 手动添加至桌面或启动栏

    1.创建软连接(也可以不用创建软连接,直接写绝对路径) sudo ln -s /opt/eclipse/eclipse /usr/bin/eclipse 2.创建desktop文件 sudo gedi ...

  8. Hie with the Pie (POJ 3311) 旅行商问题

    昨天想练习一下状态压缩,百度搜索看到有博客讨论POJ 3311,一看就是简单的旅行商问题,于是快速上手写了状态压缩,死活样例都没过... 画图模拟一遍原来多个城市可以重复走,然后就放弃思考了... 刚 ...

  9. Pyhon基本数据类型

    1.数字 1.布尔型(bool) bool型只有两个值:True和False a = False b = True 2.整形 int型 n = 12 a = "12" 将字符串类型 ...

  10. [CQOI2009]叶子的染色【性质+树形Dp】

    Online Judge:Bzoj1304,Luogu P3155 Label:无根树,树形Dp 题目描述 给定一棵\(N\)个节点的无根树,它一共有\(K\)个叶子节点.你可以选择一个度数大于1的节 ...