vijosP1499炸毁燃料库

背景

某天,外星人展开了对地球的侵略,OIer们开始与之周旋。。。

描述

外星人派出了172849个外星人乘着UFO来到地球,curimit神new带领着OIer们奋力抵抗。curimit神new觉得,仅仅抵抗外星人是不行的,因为外星人还有172849架UFO,必须从根源阻止外星人!
于是curimit神new交给小z一个任务:潜入外星人的基地,摧毁外星人的燃料库。

小z拿着curimit神new给他的地图,来到了外星人的基地。

外星人的燃料库由一排N个燃料筒组成,每个燃料筒中装有一些燃料。小z需要用炸弹炸毁燃料筒。有的燃料筒里面有许多燃料,炸毁它价值就比较高。但有的燃料筒里面只有很少的燃料,甚至没有燃料,所以炸毁它价值很低,甚至不值得去炸毁!于是curimit神new对每个燃料筒有一个估价,有正有负。但是外星人也不是没有防范。在燃料库中有172849个外星人在不停的巡逻,如果小z把任意连续M个燃料筒炸毁K个以上,外星人就会察觉,小z就遭殃了!
于是小z希望你能够帮他定出一个方案,在不被外星人察觉的情况下,能够使自己炸毁的燃料筒的估价和最大(如果所有筒的估价都是负的,那么一个不炸的估价和最大,是0)。

格式

输入格式

第一行有三个数,N,M,K。N<=1000,k<=m<=100。描述见题。

第二行有N个整数,绝对值小于1000,第i个数表示curimit神new对第i个燃料筒的估价。

输出格式

一个数,为满足条件的最大估价和。

题解:

p1499=ontak2010 vacation =p1891

我想说出题人为什么出这么明显的原题。。。。

代码:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<iostream>
 7 #include<vector>
 8 #include<map>
 9 #include<set>
10 #include<queue>
11 #include<string>
12 #define inf 1000000000
13 #define maxn 100000
14 #define maxm 100000
15 #define eps 1e-10
16 #define ll long long
17 #define pa pair<int,int>
18 #define for0(i,n) for(int i=0;i<=(n);i++)
19 #define for1(i,n) for(int i=1;i<=(n);i++)
20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
22 #define mod 1000000007
23 using namespace std;
24 inline int read()
25 {
26     int x=0,f=1;char ch=getchar();
27     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
28     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
29     return x*f;
30 }
31 int n,m,k,mincost,tot=1,s,t,a[maxn],head[maxn],q[maxm],d[maxn],from[2*maxm];
32 bool v[maxn];
33 struct edge{int from,next,go,v,c;}e[2*maxm];
34 void ins(int x,int y,int z,int w)
35 {
36     e[++tot].go=y;e[tot].from=x;e[tot].v=z;e[tot].c=w;e[tot].next=head[x];head[x]=tot;
37 }
38 void insert(int x,int y,int z,int w)
39 {
40     ins(x,y,z,w);ins(y,x,0,-w);
41 }
42 bool spfa()
43 {
44     for (int i=s;i<=t;i++){v[i]=0;d[i]=inf;}
45     int l=0,r=1,y;q[1]=s;d[s]=0;v[0]=1;
46     while(l!=r)
47     {
48         int x=q[++l];if(l==maxn)l=0;v[x]=0;
49         for (int i=head[x];i;i=e[i].next)
50          if(e[i].v&&d[x]+e[i].c<d[y=e[i].go])
51          {
52             d[y]=d[x]+e[i].c;from[y]=i;
53             if(!v[y]){v[y]=1;q[++r]=y;if(r==maxn)r=0;}
54          }
55     }
56     return d[t]!=inf;
57 }
58 void mcf()
59 {
60     while(spfa())
61     {
62         int tmp=inf;
63         for(int i=from[t];i;i=from[e[i].from]) tmp=min(tmp,e[i].v);
64         mincost+=d[t]*tmp;
65         for(int i=from[t];i;i=from[e[i].from]){e[i].v-=tmp;e[i^1].v+=tmp;}
66     }
67 }
68 int main()
69 {
70     freopen("input.txt","r",stdin);
71     freopen("output.txt","w",stdout);
72     n=read();m=read();k=read();
73     s=0;t=n+1;
74     for1(i,n)a[i]=read();
75     insert(s,1,k,0);insert(n-m+2,t,k,0);
76     for1(i,m)insert(1,i+1,1,-a[i]);
77     for2(i,m+1,n-m)insert(i-m+1,i+1,1,-a[i]);
78     for2(i,n-m+1,n)insert(i-m+1,n-m+2,1,-a[i]);
79     for1(i,n-m+1)insert(i,i+1,inf,0);
80     mcf();
81     printf("%d\n",-mincost);
82     return 0;
83 }

时间: 2024-11-06 21:25:51

vijosP1499炸毁燃料库的相关文章

BZOJ 2257: [Jsoi2009]瓶子和燃料

Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy将 K个瓶子交给火星人之后,火星人用它们装一些燃料给 jyy.所有的瓶子都没有刻度,只在瓶口标注了容量,第i个瓶子的容量为Vi(Vi 为整数,并且满足1<=Vi<=1000000000 ) . 火星人比较吝啬,他们并不会把所有的瓶子都

BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Status][Discuss] Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy 将 K个瓶子交给

[BZOJ1441&amp;BZOJ2257&amp;BZOJ2299]裴蜀定理

裴蜀定理 对于整系数方程ax+by=m,设d =(a,b) 方程有整数解当且仅当d|m 这个定理实际上在之前学习拓展欧几里得解不定方程的时候就已经运用到 拓展到多元的方程一样适用 BZOJ1441 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 该方程有解当且仅当gcd(A1...AN)|s 要求s的值最小,那么答案就是gcd(A1..AN) BZOJ2257 jyy就一直想着尽快回地球,可惜他飞船的燃料不够了.有一天他又去向

[BZOJ 2257][JSOI2009]瓶子和燃料 题解(GCD)

[BZOJ 2257][JSOI2009]瓶子和燃料 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy 将 K个瓶子交给火星人之后,火星人用它们装一些燃料给 jyy.所有的瓶子都没有刻度,只 在瓶口标注了容量,第i个瓶子的容量为Vi(Vi 为整数,并且满足1<=Vi<=10000

github生成燃尽图

一.     前期准备工作. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8添加标签 二.     修改进度 2.1进入milestone,编辑 可以看到上面有bug标签,进入并解决 三.查看进度 3.1 打开网址http://radekstepan.com/burnchart/#!/ 3.2 3.3相对路径 3.4查看燃尽图

燃尽图介绍

燃尽图功能及要素   燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示.燃尽图有一个Y轴(工作)和X轴(时间).理想情况下,该图表是一个向下的曲线,随着剩余工作的完成,“烧尽”至零.燃尽图向项目组成员和企业主提供工作进展的一个公共视图.这个词常常用于敏捷编程. 燃尽图用来观察项目过程中完成的实际工作量与剩余时间的关系.燃尽图的纵轴可以是整个项目的剩余的任务,也可以是个人剩余的全部任务. 燃尽图实例分析 本项目采用燃尽图(Sprint Burn-down

燃尽图

由于每天要过会议室不方便,我们的看板移到窗口玻璃上了. 燃尽图如下: 燃尽图补上了从5/12至今的基本动态,看起来好像已经做了很多事情,其实也不算多吧,因为项目刚起步,都是一些比较简单的事情.

订餐APP第一次sprint+燃尽图

MY-HR 成员: 角色分配 学号 博客园 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 郭明茵 用户 201406114204 http://www.cnblogs.com/mingyin/ 李浩然 产品负责人 201406114227 http://www.cnblogs.com/range/ 刘皓 Scrum Master 201406114229 http://www.cnblogs.com/shuaibi/ 第一个s

燃尽图简介

燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示.燃尽图有一个Y轴(工作)和X轴(时间).理想情况下,该图表是一个向下的曲线,随着剩余工作的完成,“烧尽”至零.燃尽图向项目组成员和企业主提供工作进展的一个公共视图. 功能:燃尽图作为SCRUM框架里面的可视化工件,数据来源客观,能够真实记录反映sprint周期内项目的进展情况,结合Sprint backlog记录,通过团队成员在回顾会议上对sprint周期的回顾,能够科学的分析出项目组存在的一些问题.从而