Description

由于省赛的失利(难以理喻的失常),gxg心情十分沉痛—不能为校争光,也辜负了老师的一番陪养。除此以外更多的是郁闷,但gxg知道大学的大门不会因为自己的郁闷而为自己打开,所以一定要振作起来。为了排遣郁闷,gxg开始玩起了智力游戏。
游戏是这样子的:
n个盒子被放成一圈,每个盒子按顺时针编号为1到n,(1<=n<=1000)。每个盒子里都有一些球,且所有盒子里球的总数不超过n。
这些球要按如下的方式转移:每一步可以将一个球从盒子中取出,放入一个相邻的盒子中。目标是使所有的盒子中球的个数都不超过1。
任务
• 从文件d.in中读入盒子的个数和每个盒子中球的个数
• 计算最少的步数是每个盒子中的球的个数不超过1
• 将结果写入文件d.out.

Input

输入文件第一行是一个整数n,表示盒子的个数。以后n行,每行中有一个非负整数,表示每个盒子中球的数目。

Output

输出文件包含一个数:达到目标所需要的最少步数。

Sample Input

12

0

0

2

4

3

1

0

0

0

0

0

1

Sample Output

19

Solution

  • 这题的数据范围一看就很小,心里很开心,果断上贪心……

  • 别提了,直接Wrong Answer!~~~原因是环的存在

  • 看了题解,才恍然大悟——最小费用最大流

  • 设源点和汇点,每个点向旁边的两个点(注意是环!)连一条容量为 0 、费用为 1 的边,

  • 之后源点向每个点都连一条容量为 该点初始球个数 、费用为 0 的边,

  • 每个点都再向汇点连一条容量为 1 、费用为 0 的边。

  • 这样一个神奇的图就构好啦!接着跑一遍最小费用最大流,输出最小费用即可。

  • 这可以用 SPFA 实现,每次按最小费用跑一次最短路,更新网络并累加,循环操作即可。

Code

#include<cstdio>
using namespace std;
const int N=2003,Mx=2e9;
int n,tot=1,ans;
int first[N],next[N*4],en[N*4],f[N*4],v[N*4];
int que[N*10],dis[N],g[N];
bool bz[N];
inline int read()
{int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data;
}
inline int min(int x,int y)
{return x<y?x:y;
}
inline void link(int x,int y,int z,int p)
{next[++tot]=first[x];first[x]=tot;en[tot]=y;f[tot]=z;v[tot]=p;
}
inline void insert(int x,int y,int z,int p)
{link(x,y,z,p);link(y,x,0,-p);
}
inline bool spfa()
{for(int i=1;i<=n+1;i++) dis[i]=Mx;int l=que[1]=0,r=1;while(l<r){int now=que[++l];bz[now]=false;for(int i=first[now];i;i=next[i])if(f[i] && dis[now]+v[i]<dis[en[i]]){dis[en[i]]=dis[now]+v[g[en[i]]=i];if(!bz[en[i]]) bz[que[++r]=en[i]]=true;}}return dis[n+1]<Mx;
}
inline void work()
{int sum=Mx;for(int i=n+1;i;i=en[g[i]^1]) sum=min(sum,f[g[i]]);for(int i=n+1;i;i=en[g[i]^1]){f[g[i]]-=sum;f[g[i]^1]+=sum;ans+=v[g[i]]*sum;}
}
int main()
{n=read();for(int i=1;i<=n;i++) {int x=read();insert(0,i,x,0);insert(i,n+1,1,0);int l=i>1?i-1:n,r=i<n?i+1:1;insert(i,l,Mx,1);insert(i,r,Mx,1);}while(spfa()) work();printf("%d",ans);return 0;
}

JZOJ 1533. 郁闷的gxg相关推荐

  1. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  2. 前两天去A公司面试,面试管问的题目一下子闷了。很郁闷。重新答题。在这里分享一下...

    前两天去A公司面试,面试管问的题目一下子闷了.很郁闷.重新答题.在这里分享一下. 1) 问:请问你最近做过什么项目,介绍一下大致的情况? 答:做了http://www.chinatravel.net, ...

  3. [BZOJ1503]郁闷的出纳员(Splay)

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  4. 郁闷。用户的无聊话题

    今天出差到外地,和用户讨论一个方案. 用户就知道要新功能(具体什么功能,这里不能说,设计到公司的机密问题,没有办法啊),也不管实际情况怎么样,能不能用,有没有这个条件,哎,真的没有办法. 也不知道什么 ...

  5. BZOJ1503:[NOI2004]郁闷的出纳员——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题面复制的洛谷的,因为洛谷好看) 题目描述 OIER公司是一家大型专业化软件公司,有着数以万 ...

  6. 郁闷的Alexa破10万。

    不知道什么时候,好像是在昨日或者前日破的,98162-- 按道理说,破十万是一个好事,像我这样的YY高手本应该用文字举杯庆祝以壮我威. 实际上我很郁闷,郁闷了一个多月了. 11月的小小爆使得我意气风发 ...

  7. 令人郁闷的 DOCTYPE

    最近在尝试一些基于 web standard 的开发.碰到了 DOCTYPE 的问题. 翻阅了 w3c 的这个列表网页:http://www.w3.org/QA/2002/04/valid-dtd-l ...

  8. 原来CASTLE RC2 还不支持IBATIS 1.6,郁闷了很久

    原来CASTLE RC2 还不支持IBATIS 1.6,郁闷了很久

  9. 2008-07-30 郁闷的旅行之一

    郁闷的旅行 这是一次郁闷的旅行,我决定把它写下来,以此来纪念可恶的大使馆,可亲的招商国旅,还有可爱的德国旅客. 2008年7月20日周日,一个平常的周末,今天我便再次出发去德国.早上一大早起床,收拾最 ...

最新文章

  1. 脑机接口可以控制机械臂
  2. NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
  3. 求最短路径——BFS、Dijkstra、Prim算法对比
  4. C++ 关键字 (try-finally) 收藏
  5. ICML论文录取难度逐年上升,New In ML为你特设“名师辅导班”
  6. C指针原理(40)-递归(1)
  7. 小程序 --- 点击放大功能、获取位置信息、文字样式省略、页面跳转(navigateTo)
  8. [恢]hdu 2147
  9. zabbix邮箱报警设置
  10. 从入门到入土:机器学习part01|python|代码分析|初步学习
  11. thinkPHP定义路由
  12. Java韩顺平 | IO流专题 | 学习小记
  13. Git.Framework 框架随手记--ORM条件组合
  14. Ubuntu系统实现简单c语言编程
  15. yaml 变量引用_Yaml语法使用
  16. OSChina 周四乱弹 —— 当你简历注水但还是找到了工作
  17. php snappy,php – 使用Knp Snappy生成pdf文件时出现错误字符
  18. 会泡妞的程序员都是怎么撩妹子的?
  19. Java 并发编程实战演练
  20. mpvue开发美团外卖点餐小程序

热门文章

  1. QT中鼠标位置获取问题之event-globalPos()与pos()函数
  2. CUDA函数库调用问题解决
  3. GoogLeNet代码解读
  4. 王陆C语言,王陆和王舞的关系
  5. 云炬创业政策学习笔记20210111
  6. button 样式_实战PyQt5: 111-可以使用QSS样式表的部件
  7. Delphi中DLL封装业务逻辑的实现
  8. js中的可变参数arguments与json
  9. delphi中处理数据类型错误的方法
  10. 利用WinRAR命令行压缩文件或文件夹2007-11-14 15:07压缩文件夹