原文地址:http://www.cnblogs.com/GXZlegend/p/6825296.html


题目描述

某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费。假设仓库容量为S。

输入

第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S<=10000)
第2行:U1 , U2 , ... , Ui , ... , Un (0<=Ui<=10000)
第3行:d1 , d2 , ..., di , ... , dn (0<=di<=100)

输出

只有1行,一个整数,代表最低成本

样例输入

3 1 1000
2 4 8
1 2 4

样例输出

34


题解

贪心 费用流

贪心细节太多了,还是费用流码起来快。

建图很简单:S->i,容量为inf,费用为di;i->t,容量为ui,费用为0;i->i+1,容量为S,费用为m。

这里需要注意的是当月购买的不需要存到仓库中。

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
queue<int> q;
int head[60] , to[500] , val[500] , cost[500] , next[500] , cnt = 1 , s , t , dis[60] , from[60] , pre[60];
void add(int x , int y , int v , int c)
{
to[++cnt] = y , val[cnt] = v , cost[cnt] = c , next[cnt] = head[x] , head[x] = cnt;
to[++cnt] = x , val[cnt] = 0 , cost[cnt] = -c , next[cnt] = head[y] , head[y] = cnt;
}
bool spfa()
{
int x , i;
memset(from , -1 , sizeof(from));
memset(dis , 0x3f , sizeof(dis));
dis[s] = 0 , q.push(s);
while(!q.empty())
{
x = q.front() , q.pop();
for(i = head[x] ; i ; i = next[i])
if(val[i] && dis[to[i]] > dis[x] + cost[i])
dis[to[i]] = dis[x] + cost[i] , from[to[i]] = x , pre[to[i]] = i , q.push(to[i]);
}
return ~from[t];
}
int mincost()
{
int ans = 0 , i , k;
while(spfa())
{
k = 0x3f3f3f3f;
for(i = t ; i != s ; i = from[i]) k = min(k , val[pre[i]]);
ans += k * dis[t];
for(i = t ; i != s ; i = from[i]) val[pre[i]] -= k , val[pre[i] ^ 1] += k;
}
return ans;
}
int main()
{
int n , m , k , i , x;
scanf("%d%d%d" , &n , &m , &k) , s = 0 , t = n + 1;
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &x) , add(i , t , x , 0);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &x) , add(s , i , 0x3f3f3f3f , x);
for(i = 1 ; i < n ; i ++ ) add(i , i + 1 , k , m);
printf("%d\n" , mincost());
return 0;
}

最新文章

  1. 在iIBatis中使用MySql中出现的配置问题
  2. linux文件数相关命令
  3. ajax请求下拉列表框的实现(面向对象封装类)
  4. javascript URI的编码
  5. 1分钟内检查Linux服务器性能的命令
  6. IOS的一些尺寸
  7. Madwifi Mad coding:自底向上分析associated_sta的更新过程 —— RSSI和MACADDR等信息获取的底层原理
  8. hdoj 1977 Consecutive sum II
  9. 从零开始,打造自己的首个 iOS 框架
  10. Observer 模式
  11. Java中如何使用Redis做缓存
  12. 完整的 dataType=text/plain jquery ajax 登录验证
  13. JavaScript学习笔记(高级部分—01)
  14. Eclipse乱码怎么办
  15. ZipFile和ZipInputSteam解压zip文件
  16. dubbo refrence bean(服务引用)
  17. C++的IO处理中的头文件以及类理解(2)&lt;sstream&gt;头文件
  18. Linux内核入门到放弃-进程管理和调度-《深入Linux内核架构》笔记
  19. PHP实现 手机号码归属地查询
  20. ionic3 双向数据绑定失效 脏值检测失效

热门文章

  1. 10-UIScrollView
  2. ES6 extends继承及super使用读书笔记
  3. 【课堂笔记精选】为了能够用“Unity”软件做游戏,我要从最基础的开始复习JavaScript
  4. Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting &#39;name pattern&#39; at character position 36
  5. Wordpress网站中添加百度统计代码
  6. gzip,bzip2,xz压缩工具
  7. Ansible学习 Playbooks_1
  8. Eclipse搭建SpringBoot
  9. scrapy--boss直聘
  10. php 利用composer引用第三方类库构建项目