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 ...
随机推荐
- tp系统常量
ThinkPHP的公共入口文件里定义了系统常量 RUNTIME_PATH----系统运行时目录 LIB_PATH-----------系统核心类库目录 CORE_PATH--------Think类库 ...
- <东方梦符祭> N1无尽30波终于通了
嘛也算是第一次通关 纪念一下 阵容:xjb搭的杂牌队 主C:古明绝恋 露米娅(真·R卡战神)比那名居天子 斯卡雷特 控制:琪露诺 蕾蒂 灵梦 挂件:小伞 纳兹琳 古明地觉 永江依玖 第一发就直接抽到了 ...
- lombok无法解析log
首先确认开发工具是否安装lombok,已安装的话打开lombok插件页,选择update, 然后重启idea.
- idea14远程调试linux下的tomcat
进入到idea的tomcat的run/debug配置,新建个remote tomcat,然后填写相关信息,如上图(注意远程调试端口). 再选择Startup/Connection,如下图所示: 到此, ...
- reading/writing files in Python
file types: plaintext files, such as .txt .py Binary files, such as .docx, .pdf, iamges, spreadsheet ...
- 原生js实现三个按钮绑定三个计时器,点击其中一个按钮,开启当前计时器,另外另个不开启
今天在某个前端交流群,有个小伙伴问了一个小功能,自己想了一下,代码如下,可以实现基本功能: 下面是html结构 <div id="demo"> <input ty ...
- BZOJ 4415 洛谷 3988 [Shoi2013]发牌
[题解] 权值线段树.查询当前牌堆顶的牌并且删掉就好了. #include<cstdio> #include<algorithm> #define N 3000010 #def ...
- 天猫双11红包前端jQuery
[01] 浏览器支持:IE10+和其他现代浏览器. 效果图: 步骤: HTML部分: <div class="opacity" style=&qu ...
- ACE in Action
ACE in Action https://cdn.xgqfrms.xyz/web-ide/index.html TinyMCE https://panjiachen.github.io/vue-el ...
- windows server 2008R2 上安装配置freesshd
从FREESSHD官方网站下载最新的软件版本,下载地址是http://www.freesshd.com/?ctt=download 双击刚刚下载的freeSSHd.exe进行安装,安装时其他都是默认安 ...