HDU 4106 Fruit Ninja 费用流
来源:互联网 发布:linux查看当前用户命令 编辑:程序博客网 时间:2024/05/22 02:10
Fruit Ninja
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 629 Accepted Submission(s): 198
Problem Description
Fruit Ninja is a juicy action game enjoyed by millions of players around the world, with squishy, splat and satisfying fruit carnage! Become the ultimate bringer of sweet, tasty destruction with every slash.
Ali is very good at this game. He can cut every single fruit accurately if he wants. But after playing a long time, he became so tired that he cannot cut more than K fruit among any consecutively M fruit. But he also enjoys watching the fruit carnage, especially the one with big fruits. So he wants to maximum the total weight of the cut fruit.
Input
The input consists several testcases.
The first line contains three integer N, M, K (1 <= K <= M <= N <= 1000). N is the number of fruit, while M, K are described in the problem.
The second line contains N integers W1 to Wn (1 <= Wi <= 10000), and Wi represents the i-th fruit’s price.
The first line contains three integer N, M, K (1 <= K <= M <= N <= 1000). N is the number of fruit, while M, K are described in the problem.
The second line contains N integers W1 to Wn (1 <= Wi <= 10000), and Wi represents the i-th fruit’s price.
Output
Print a real number, the maximum total weight of the cut fruit.
Sample Input
10 5 34 4 4 6 6 6 6 6 4 4
Sample Output
30
Source
2011 Alibaba-Cup Campus Contest
给出n个数的序列,选择一些数使总和最大。
对于任意长为m的区间中至多有k个数被选。
长为m共n-m+1个区间,选择一个点相当于覆盖了其中几个区间一次,每个区间最多被覆盖k次
建图就和poj3680一样了
#include <iostream>#include <sstream>#include <cstdio>#include <cstring>#include <algorithm>#include <functional>#include <cmath>#include <vector>#include <queue>#include <map>#include <set>#include <list>#include <stack>#define ALL(v) (v).begin(),(v).end()#define foreach(i,v) for (__typeof((v).begin())i=(v).begin();i!=(v).end();i++)#define SIZE(v) ((int)(v).size())#define mem(a) memset(a,0,sizeof(a))#define mem1(a) memset(a,-1,sizeof(a))#define lp(k,a) for(int k=1;k<=a;k++)#define lp0(k,a) for(int k=0;k<a;k++)#define lpn(k,n,a) for(int k=n;k<=a;k++)#define lpd(k,n,a) for(int k=n;k>=a;k--)#define sc(a) scanf("%d",&a)#define sc2(a,b) scanf("%d %d",&a,&b)#define lowbit(x) (x&(-x))#define ll int#define pi pair<int,int>#define vi vector<int>#define PI acos(-1.0)#define pb(a) push_back(a)#define mp(a,b) make_pair(a,b)#define TT cout<<"*****"<<endl;#define TTT cout<<"********"<<endl;using namespace std;#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define N 50000#define M 50000struct Edge{ ll to,cap,cost,nex; Edge() {} Edge(ll to,ll cap,ll cost,ll next):to(to),cap(cap),cost(cost),nex(next) {}} edge[M];ll head[N],top;ll D[N],A[N],P[N],li[N];bool inq[N];void add(ll from,ll to,ll cap,ll cost){ edge[top]=Edge(to,cap,cost,head[from]); head[from]=top++; edge[top]=Edge(from,0,-cost,head[to]); head[to]=top++;}bool spfa(ll s,ll t,ll &flow,ll &cost){ for(ll i=0;i<=t;i++) D[i]=inf; mem(inq); queue<ll>q; q.push(s); D[s]=0; A[s]=inf; while(!q.empty()) { ll u=q.front(); q.pop(); inq[u]=0; for(ll i=head[u];~i;i=edge[i].nex) { Edge &e=edge[i]; if(e.cap && D[e.to]>D[u]+e.cost) { D[e.to]=D[u]+e.cost; P[e.to]=i; A[e.to]=min(A[u],e.cap); if(!inq[e.to]) { inq[e.to]=1; q.push(e.to); } } } } if(D[t]==inf) return false; cost+=D[t]*A[t]; flow+=A[t]; ll u=t; while(u!=s) { edge[P[u]].cap-=A[t]; edge[P[u]^1].cap+=A[t]; u=edge[P[u]^1].to; } return true;}ll mcmf(ll s,ll t){ ll flow=0, cost=0; while(spfa(s,t,flow,cost)); return cost;}int a[N],S,T,n,m,k,re;void init(){ mem1(head); top=0; S=0; T=n-m+3; lpn(i,0,n-m+1) { add(i,i+1,k,0); } lp(i,n) { int x=max(1,i-m+1); int y=min(i,n-m+1); add(x,y+1,1,-a[i]); } add(n-m+2,n-m+3,k,0);}int main(){ // freopen("in.txt","r",stdin); while(~scanf("%d %d %d",&n,&m,&k)) { re=0; lp(i,n) { sc(a[i]); re+=a[i]; } if(m<=k) { printf("%d\n",re); continue; } init(); int cost=mcmf(S,T); printf("%d\n",-cost); } return 0;}
0 0
- HDU 4106 Fruit Ninja 费用流
- hdu 4106 Fruit Ninja
- HDU 4106 Fruit Ninja
- HDU 4106 Fruit Ninja 区间k覆盖问题 最小费用流
- hdu 3952 Fruit Ninja
- hdu 4000 Fruit Ninja
- hdu 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU 4000 Fruit Ninja
- HDU-3952-Fruit Ninja
- hdu 4620 Fruit Ninja Extreme
- hdu 4620 Fruit Ninja Extreme
- HDU 4620 Fruit Ninja Extreme
- hdu 4620 Fruit Ninja Extreme
- hdu 4620 Fruit Ninja Extreme
- hdu 4000 Fruit Ninja 树状数组+统计
- HDU 4000 Fruit Ninja 树状数组
- celery实现任务统一收集、分发执行
- jeecms内容标签基类
- JS初级学习笔记(1)
- 通过http user-agent判断是否为手机浏览器
- redis技术之旅七
- HDU 4106 Fruit Ninja 费用流
- TCP速率与窗口,带宽,RTT之间的关系
- 慎用 BMC Filter
- 判断一个字符串是否为回文串和镜像串(Palindromes)
- 菜鸟日记之---禁用删除键(backSpace键)方法 js
- mac下使用github 上传代码
- 微信那些事-群发图文(一)
- StrangeIoc框架的简要介绍
- Java程序以后台方式在Linux上运行并且重定向LOG文件