思路:

1.DP

f[i][j]表示第i个月的月底 还剩j的容量

转移还是相对比较好想的……

  1. f[i][j+1]=min(f[i][j+1],f[i][j]+d[i]);
  2. if(j>=u[i+1])f[i+1][j-u[i+1]]=min(f[i+1][j-u[i+1]],f[i][j]+m*j);
  3. else f[i+1][0]=min(f[i+1][0],f[i][j]+d[i+1]*(u[i+1]-j)+m*j);
  1. //By SiriusRen
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. int n,m,s,u[55],d[55],f[55][10005];
  7. int main(){
  8. scanf("%d%d%d",&n,&m,&s);
  9. for(int i=1;i<=n;i++)scanf("%d",&u[i]);
  10. for(int i=1;i<=n;i++)scanf("%d",&d[i]);
  11. memset(f,0x3f,sizeof(f));
  12. f[1][0]=d[1]*u[1];
  13. for(int i=1;i<=n;i++)
  14. for(int j=0;j<=s;j++){
  15. f[i][j+1]=min(f[i][j+1],f[i][j]+d[i]);
  16. if(j>=u[i+1])f[i+1][j-u[i+1]]=min(f[i+1][j-u[i+1]],f[i][j]+m*j);
  17. else f[i+1][0]=min(f[i+1][0],f[i][j]+d[i+1]*(u[i+1]-j)+m*j);
  18. }
  19. printf("%d\n",f[n][0]);
  20. }

2.

费用流 裸的建图吧

源->i 流量inf 费用d[i]

i->汇 流量u[i] 费用0

i->i+1 (i!=n) 流量S 费用m

跑一哈 搞定~

  1. //By SiriusRen
  2. #include <queue>
  3. #include <cstdio>
  4. #include <cstring>
  5. using namespace std;
  6. #define N 55
  7. #define M 55555
  8. #define inf 0x3f3f3f3f
  9. #define mem(x,y) memset(x,y,sizeof(x))
  10. int n,m,S,xx,T,edge[M],v[M],cost[M],first[N],nxt[M],vis[N],minn[N],d[N],with[N],tot,ans;
  11. void Add(int x,int y,int C,int E){edge[tot]=E,cost[tot]=C,v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
  12. void add(int x,int y,int C,int E){Add(x,y,C,E),Add(y,x,-C,0);}
  13. bool tell(){
  14. mem(vis,0),mem(with,0),mem(d,0x3f),mem(minn,0x3f);
  15. queue<int>q;q.push(0),d[0]=0;
  16. while(!q.empty()){
  17. int t=q.front();q.pop();vis[t]=0;
  18. for(int i=first[t];~i;i=nxt[i])
  19. if(d[v[i]]>d[t]+cost[i]&&edge[i]){
  20. with[v[i]]=i,d[v[i]]=d[t]+cost[i],minn[v[i]]=min(minn[t],edge[i]);
  21. if(!vis[v[i]])vis[v[i]]=1,q.push(v[i]);
  22. }
  23. }return d[T]!=0x3f3f3f3f;
  24. }
  25. int zeng(){
  26. for(int i=T;i;i=v[with[i]^1])
  27. edge[with[i]]-=minn[T],edge[with[i]^1]+=minn[T];
  28. return minn[T]*d[T];
  29. }
  30. int main(){
  31. mem(first,-1);
  32. scanf("%d%d%d",&n,&m,&S),T=n+1;
  33. for(int i=1;i<=n;i++)scanf("%d",&xx),add(i,T,0,xx);
  34. for(int i=1;i<=n;i++){
  35. scanf("%d",&xx),add(0,i,xx,inf);
  36. if(i!=n)add(i,i+1,m,S);
  37. }
  38. while(tell())ans+=zeng();
  39. printf("%d\n",ans);
  40. }



这道题 费用流还是要稍微快一点儿的……

BZOJ 2424 DP OR 费用流的更多相关文章

  1. BZOJ 2424: [HAOI2010]订货 费用流

    2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...

  2. [bzoj 1449] 球队收益(费用流)

    [bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...

  3. BZOJ.2597.[WC2007]剪刀石头布(费用流zkw)

    BZOJ 洛谷 \(Description\) 给定一张部分边方向已确定的竞赛图.你需要给剩下的边确定方向,使得图中的三元环数量最多. \(n\leq100\). \(Solution\) 这种选择之 ...

  4. POJ 2677 旅行商问题 双调dp或者费用流

    Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3408   Accepted: 1513 Description ...

  5. luogu P5470 [NOI2019]序列 dp 贪心 费用流 模拟费用流

    LINK:序列 考虑前20分 容易想到爆搜. 考虑dp 容易设\(f_{i,j,k,l}\)表示前i个位置 选了j对 且此时A选择了k个 B选择了l个的最大值.期望得分28. code //#incl ...

  6. [CF1525D] Armchairs (DP / 模拟费用流)

    题面简述 一条线上等距地分布着 n n n 老鼠和 m m m 洞( m ≥ n m\geq n m≥n),这连续 n + m n+m n+m 个位置上要么是老鼠要么是洞,一个老鼠进一个洞,代价是所有 ...

  7. bzoj 1070: [SCOI2007]修车 费用流

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2785  Solved: 1110[Submit][Status] ...

  8. BZOJ 3171 循环格(费用流)

    题意 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c),你可以沿着箭头防线在格子间行走.即如果(r ...

  9. BZOJ 1070 修车 【费用流】

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...

随机推荐

  1. 百度分页效果之纯jsp版

    数据库连接工具类 package com.gao.page.utils; import java.sql.Connection; import java.sql.DriverManager; publ ...

  2. 确保 Xcode 每次 Build 时都自己主动更新资源

    參考:p=22" target="_blank">http://quick.cocoachina.com/?p=22 刚建立的quickproject.每次修改lu ...

  3. Process Monitor

    https://en.wikipedia.org/wiki/Process_Monitor Process Monitor is a free tool from Windows Sysinterna ...

  4. 什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间

    什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的 ...

  5. hiho 1613 - 墨水滴 - bfs+优先队列 *

    题目链接 小Ho有一张白纸,上面有NxN个格子.小Ho可以选择一个格子(X, Y),在上面滴一滴墨水.如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子.同时周围的格子也会被这滴墨水浸染 ...

  6. php获取js里的参数

    php获取js的值有如下方式: 1.php echo出js文件得到返回值,在gamemap.js文件中输出参数. echo '<script type="text/javascript ...

  7. 多任务-进程之PID

    1.进程pid,如何在程序中获取我们的进程号,从而查看当前的进程 # -*- coding:utf-8 -*- from multiprocessing import Process import o ...

  8. Html标记语言学习一2017年6月12日

    今天主要学习了 frame的用法. <frameset> 可以将网页分成几个不同的部分 使用 cols  和  rows 两种标记.前者是列,后者是行 <frame/>  单标 ...

  9. centos部署nginx服务

    1.准备安装程序 pcrl-8.43.tar.gz  zlib-1.2.11.tar.gz  openssl-1.0.1j.tar.gznginx-1.9.9.tar.gz 2.将下载的包拷贝到/us ...

  10. HDU 4945 2048 DP 组合

    思路: 这个题写了一个背包的解法,超时了.搜了下题解才发现我根本不会做. 思路参见这个: 其实我们可以这样来考虑,求补集,用全集减掉不能组成2048的集合就是答案了. 因为只要达到2048就可以了,所 ...