bzoj 2465 小球
题目大意:
给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量
必须把球放到瓶子里面 计算最多能放多少个球到这些瓶子里
思路:
开始想的是费用流
超级源向每个球连一条 容量为1,费用为球的分数的边
每个瓶子和它可以装下的球连一条 容量为1,费用为0的边
每个瓶子和汇点连一条 容量为瓶的容量,费用为0的边
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define inf 2139062143
#define MAXN 500
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) x=x*+ch-'',ch=getchar();
return x*f;
}
int n,m,s,t,a[MAXN];
ll ans;
struct ZKW
{
int fst[MAXN],to[MAXN*MAXN],nxt[MAXN*MAXN],val[MAXN*MAXN],cos[MAXN*MAXN],cnt;
int dis[MAXN],vis[MAXN],q[MAXN];
void mem() {ans=,cnt=;memset(fst,0xff,sizeof(fst));}
void add(int u,int v,int w,int c) {nxt[cnt]=fst[u],fst[u]=cnt,to[cnt]=v,val[cnt]=w,cos[cnt++]=c;}
int spfa()
{
memset(vis,,sizeof(vis));
memset(dis,,sizeof(dis));
int l=,r=;
q[++r]=t,dis[t]=,vis[t]=;
while(l<=r)
{
int x=q[l++];
for(int i=fst[x];i!=-;i=nxt[i])
{
if(val[i^] && dis[to[i]]>dis[x]-cos[i])
{
dis[to[i]]=dis[x]-cos[i];
if(!vis[to[i]]) q[++r]=to[i],vis[to[i]]=;
}
}
vis[x]=;
}
return dis[s]<inf;
}
int dfs(int x,int a)
{
if(x==t){vis[t]=;return a;}
int res=,f;vis[x]=;
for(int i=fst[x];i!=-;i=nxt[i])
if(!vis[to[i]]&&val[i]&&dis[x]-cos[i]==dis[to[i]])
{
f=dfs(to[i],min(val[i],a-res));
if(f)ans+=f*cos[i],val[i]-=f,val[i^]+=f,res+=f;
if(res==a)break;
}
return res;
}
void solve()
{
int f=;
while(spfa())
{
vis[t]=;
while(vis[t])
{
memset(vis,,sizeof(vis));
f+=dfs(s,);
}
}
printf("%d %lld\n",f,-ans);
}
}Z;
int main()
{
int g,h;
while(cin>>n>>m)
{
if(!n&&!m) return ;
Z.mem();
s=,t=n+m+;
for(int i=;i<=n;i++) {a[i]=read();Z.add(s,i,,-a[i]);Z.add(i,s,,a[i]);}
for(int j=;j<=m;j++)
{
g=read(),h=read();
for(int i=;i<=n;i++)
if(h>=a[i]) {Z.add(i,n+j,,);Z.add(n+j,i,,);}
Z.add(n+j,t,g,);Z.add(t,n+j,,);
}
Z.solve();
}
}
棒神写的费用流没T 还是我太弱了 %%%棒神
然后发现有个贪心就是使每个球尽可能价值最大,A了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define inf 2139062143
#define MAXN 220
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) x=x*+ch-'',ch=getchar();
return x*f;
}
int n,m,a[MAXN];
struct data
{
int q,c;
bool operator < (const data &x)const
{
return q<x.q||(q==x.q&&c<x.c);
}
}b[MAXN];
int main()
{
int ans,res,j;
while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
{
ans=res=;
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=m;i++) b[i].c=read(),b[i].q=read();
sort(a+,a+n+);
sort(b+,b+m+);
j=m;
for(int i=n;i&&j;i--)
{
while(!b[j].c) j--;
if(b[j].q>=a[i]) b[j].c--,ans++,res+=a[i];
}
printf("%d %d\n",ans,res);
}
}
bzoj 2465 小球的更多相关文章
- BZOJ 2465: [中山市选2009]小球
难度在于读题 #include<cstdio> #include<algorithm> using namespace std; int a[1000005]; struct ...
- bzoj千题计划189:bzoj1867: [Noi1999]钉子和小球
http://www.lydsy.com/JudgeOnline/problem.php?id=1867 dp[i][j] 落到(i,j)的方案数 dp[i][j]=0.5*dp[i-1][j] ...
- bzoj 2037: [Sdoi2008]Sue的小球
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; struc ...
- bzoj 2037: [Sdoi2008]Sue的小球——dp
Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
- bzoj 1867: [Noi1999]钉子和小球【dp】
设f[i][j]为掉到f[i][j]时的概率然后分情况随便转移一下就好 主要是要手写分数比较麻烦 #include<iostream> #include<cstdio> usi ...
- BZOJ 1867 [Noi1999]钉子和小球 DP
想状态和钉子的位置如何匹配想了半天...后来发现不是一样的吗$qwq$ 思路:当然是$DP$啦 提交:>5次(以为无故$RE$,实则是先乘后除爆了$long\space long$) 题解: 若 ...
- [PA2014] [BZOJ 3709]~[BZOJ 3719] 合集
今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了) 一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待 [BZOJ 3709]Bohater 一眼就能感受到贪心的气息 因为很直观 ...
- 【BZOJ2037】Sue的小球(动态规划)
[BZOJ2037]Sue的小球(动态规划) 题面 BZOJ 题解 莫名想到这道题目 很明显是一样的 设\(f[i][j][0/1]\)表示已经接到了\(i-j\)这一段的小球 当前在\(i\)或者在 ...
- ●BZOJ 1272 [BeiJingWc2008]Gate Of Babylon
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1272 题解: 容斥,Lucas定理本题的容斥考虑类似 [BZOJ 1042 [HAOI200 ...
随机推荐
- 梦想CAD控件网页版标注样式
增加标注样式 _DMxDrawX::AddDimStyle 增加一个新的标注样式,如果当前已经有指定名的标注样式,就直接失败返回.详细说明如下: 参数 说明 BSTR pszName 新增加的标注样式 ...
- Angular ZoneJS 原理
Zone.js到底是如何工作的? 原文链接: blog.kwintenp.com 如果你阅读过关于Angular 2变化检测的资料,那么你很可能听说过zone.Zone是一个从Dart中引入的特性并被 ...
- iOS多媒体框架介绍
媒体层 媒体层包含图形技术.音频技术和视频技术,这些技术相互结合就可为移动设备带来最好的多媒体体验,更重要的是,它们让创建外观音效俱佳的应用程序变得更加容易.您可以使用iOS的高级框架更快速地创建高级 ...
- Laravel学习:请求到响应的生命周期
Laravel请求到响应的整个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段.请求实例化阶段.请求处理阶段.响应发送和程序终止阶段. 程序启动准备阶段 服务容器实例化 服务容器的实例化和基本注册 ...
- 【02】bootstrap起步
起步 简要介绍 Bootstrap,以及如何下载.使用,还有基本模版和案例,等等. 下载 Bootstrap (当前版本 v3.3.5)提供以下几种方式帮你快速上手,每一种方式针对具有不同技能等级的开 ...
- 【Codeforces 493C】Vasya and Basketball
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 枚举三分线(离散后)的位置 然后根据预处理的前缀和,快速算出两个队伍的分数. [代码] #include <bits/stdc++.h& ...
- nyoj 1112 求次数(map, set)
求次数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新的字符串,i 属于[0,strl ...
- mybatis源码阅读-执行一个sql的流程(九)
图解 图片来源:https://my.oschina.net/zudajun/blog/670373 Mapper接口调用原理 我们整合成Spring 直接使用Mapper就能执行对应的sql 表现 ...
- codevs1031 质数环
一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 ...
- [bzoj1084][SCOI2005]最大子矩阵(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1084 分析: m=1时:相当于只有一行数,让你取出p段,使得总和最大 明显可以DP,f ...