hdu 4406 费用流
这题问题就是当前时刻究竟选择哪门课程,易知选择是和分数有关的,而且是一个变化的权值,所以能够用拆点的方式,把从基础分到100分都拆成点。但若这样拆点的话,跑费用流时就必须保证顺序。这样就麻烦了。。观察公式。发现同一门课,分数越高。权值是越低的,所以这是一个单调的。这种话就能够对每个分数建一条边。费用流会一条一条的跑。
注意将课程放在X集
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define eps 1e-8
#define MAXN 100
#define MAXM 1000000
#define INF 100000
struct node
{
int u,v,f,next;
double c;
}e[MAXM];
int n,k,head[MAXN],pre[MAXN],vis[MAXN];
double dist[MAXN];
int en,s,t,maxflow,mincost,m; //s源点,t汇点
void add(int u,int v,double c,int f)//加边
{
e[en].u=u;
e[en].v=v;
e[en].c=c;
e[en].f=f;
e[en].next=head[u];
head[u]=en++;
e[en].u=v;
e[en].v=u;
e[en].c=-c;
e[en].f=0;
e[en].next=head[v];
head[v]=en++;
}
int spfa()
{
int i,u,v;
for(i=0;i<=t;i++)
pre[i]=-1,vis[i]=0,dist[i]=-INF;
dist[s]=0;
vis[s]=1;
queue<int>q;
q.push(s);
while(!q.empty())
{
u=q.front();
q.pop();
for(i=head[u];i!=-1;i=e[i].next)
{
v=e[i].v;
if(e[i].f>0&&dist[u]+e[i].c-eps>dist[v])
{
dist[v]=dist[u]+e[i].c;
pre[v]=i;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
vis[u]=0;
}
if(dist[t]==-INF)
return 0;
return 1;
}
void add()
{
int v;
int maxf=INF;
for(v=pre[t];~v;v=pre[e[v].u])
maxf=min(maxf,e[v].f);
for(v=pre[t];~v;v=pre[e[v].u])
{
e[v].f-=maxf;
e[v^1].f+=maxf;
mincost+=maxf*e[v].c;
}
maxflow+=maxf;
}
int a[123];
int w[123];
int ADD[123];
int mp[123][123];
void init()
{
maxflow=0;
mincost=0;
s=0;
t=n+m+1;
en=0;
memset(head,-1,sizeof(head));
memset(ADD,0,sizeof(ADD));
}
double cal(int x,int w)
{
return (4.0-3.0*(100.0-x)*(100.0-x)/1600.0)*w;
}
int main()
{
int k,b;
while(~scanf("%d%d%d",&n,&k,&m))
{
if(n+k+m==0) break;
init();
for(int i=1;i<=m;i++) scanf("%d",&w[i]);
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
{
for(int q=a[i];q<60;q++) add(s,i,INF,1);
for(int q=max(a[i],60);q<100;q++) add(s,i,cal(q+1,w[i])-cal(q,w[i]),1);
}
for(int i=1;i<=n;i++)
{
add(m+i,t,0,k);
for(int j=1;j<=m;j++)
{
scanf("%d",&b);
if(b) add(j,m+i,0,INF);
}
}
while(spfa()) add();
for(int i=head[s];~i;i=e[i].next)
{
if(e[i].v>=1&&e[i].v<=m&&e[i].f==0) ADD[e[i].v]++;
}
int ok=1;
for(int i=1;i<=m;i++)
{
if(a[i]+ADD[i]<60)
{
ok=0;
break;
}
a[i]+=ADD[i];
}
if(ok==0)
{
puts("0.000000");
}
else
{
double ans=0;
int d=0;
for(int i=1;i<=m;i++)
{
ans+=cal(a[i],w[i]);
d+=w[i];
}
printf("%.6lf\n",ans/d);
}
}
return 0;
}
hdu 4406 费用流的更多相关文章
- Going Home HDU - 1533 费用流
http://acm.hdu.edu.cn/showproblem.php?pid=1533 给一个网格图,每两个点之间的匹配花费为其曼哈顿距离,问给每个的"$m$"匹配到一个&q ...
- hdu 5045 费用流
滚动建图,最大费用流(每次仅仅有就10个点的二分图).复杂度,m/n*(n^2)(n<=10),今年网络赛唯一网络流题,被队友状压DP秒了....难道网络流要逐渐退出历史舞台???.... #i ...
- HDU 3376 费用流 Matrix Again
题意: 给出一个n × n的矩阵,每个格子中有一个数字代表权值,找出从左上角出发到右下角的两条不相交的路径(起点和终点除外),使得两条路径权值之和最大. 分析: 如果n比较小的话是可以DP的,但是现在 ...
- hdu 2686 费用流 / 双线程DP
题意:给一个方阵,求从左上角出到右下角(并返回到起点),经过每个点一次不重复,求最大获益(走到某处获得改点数值),下来时每次只能向右或向下,反之向上或向左. 俩种解法: 1 费用流法:思路转化:从左 ...
- hdu 1853 (费用流 拆点)
// 给定一个有向图,必须用若干个环来覆盖整个图,要求这些覆盖的环的权值最小. 思路:原图每个点 u 拆为 u 和 u' ,从源点引容量为 1 费用为 0 的边到 u ,从 u' 引相同性质的边到汇点 ...
- HDU 3667 费用流 拆边 Transportation
题意: 有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市. 每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai 而且每条路最多运送Ci个货物,求最小费用. 分析: ...
- HDU 3667 费用流(拆边)
题意:有n个城市(1~n),m条有向边:有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用. 思路:c ...
- HDU 5644 (费用流)
Problem King's Pilots (HDU 5644) 题目大意 举办一次持续n天的飞行表演,第i天需要Pi个飞行员.共有m种休假计划,每个飞行员表演1次后,需要休假Si天,并提供Ti报酬来 ...
- HDU - 4780费用流
题意:M台机器要生产n个糖果,糖果i的生产区间在(si, ti),花费是k(pi-si),pi是实际开始生产的时间机器,j从初始化到生产糖果i所需的时间Cij,花费是Dij,任意机器从生产糖果i到生产 ...
随机推荐
- HDU 4696 Answers 水题
http://acm.hdu.edu.cn/showproblem.php?pid=4696 由题意可知 1<=Ci<=2 而且图上一定有环 那么我们可以得出: 只要存在奇环(即Ci=1) ...
- 【DRF版本】
目录 使用内置的URLPathVersioning类 使用自定义的版本控制类 首先,我们开发的项目会有多个版本. 其次,我们的项目版本会随着更新越来越多,我们不可能因出了新版本就不维护旧版本了. 那么 ...
- 阅读笔记—EL表达式
表达式语言(EL) 表达式语言是一种在JSP页面中使用的数据访问语言,通过它可以很方便地在JSP页面中访问应用程序数据. 使用EL访问数据 表达式语言的使用形式: ${exp ...
- mysql 不能启动的两种错误提示及解决方法
在linux系统中安装mysql服务器详细步骤并解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw ...
- worktools-git 工具的使用总结(2)
1.创建分支 git branch son parent //创建分支,是在master 分支的基础上创建 :~/myGit$ git st # On branch master nothing to ...
- CISP/CISA 每日一题 12
CISA 每日一题(答) 支付系统模式有哪些: 电子现金模式:支付者不必在线,无条件不可追溯性 电子支票模式:支付者不必在线,涉及个人隐私 电子转帐模式:收款人不必在线 图象处理中,应该有适当的___ ...
- hdu5387 Clock
Problem Description Give a time.(hh:mm:ss).you should answer the angle between any two of the minute ...
- HTML的SEO(搜索引擎优化)标准
HTML的SEO(搜索引擎优化)标准 一.总结 这个做seo的时候要多看,做网站优化的时候 1. SEO(搜索引擎优化):通过总结搜索引擎的排名规律,对网站进行合理优化,使你的网站在百度和Google ...
- html中的瀑布流是什么
html中的瀑布流是什么 一.总结 1.瀑布流: 从左往右排列,哪一列现在的总高度最小,就优先排序把item(单元格)放在这一列.这样排完所有的单元格后,可以保证每一列的总高度都相差不大 2.看效果图 ...
- iterm恢复默认设置
命令行执行以下命令即可: defaults delete com.googlecode.iterm2