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个燃料筒的估价。
输出格式
一个数,为满足条件的最大估价和。
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 100000
#define maxm 100000
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,k,mincost,tot=,s,t,a[maxn],head[maxn],q[maxm],d[maxn],from[*maxm];
bool v[maxn];
struct edge{int from,next,go,v,c;}e[*maxm];
void ins(int x,int y,int z,int w)
{
e[++tot].go=y;e[tot].from=x;e[tot].v=z;e[tot].c=w;e[tot].next=head[x];head[x]=tot;
}
void insert(int x,int y,int z,int w)
{
ins(x,y,z,w);ins(y,x,,-w);
}
bool spfa()
{
for (int i=s;i<=t;i++){v[i]=;d[i]=inf;}
int l=,r=,y;q[]=s;d[s]=;v[]=;
while(l!=r)
{
int x=q[++l];if(l==maxn)l=;v[x]=;
for (int i=head[x];i;i=e[i].next)
if(e[i].v&&d[x]+e[i].c<d[y=e[i].go])
{
d[y]=d[x]+e[i].c;from[y]=i;
if(!v[y]){v[y]=;q[++r]=y;if(r==maxn)r=;}
}
}
return d[t]!=inf;
}
void mcf()
{
while(spfa())
{
int tmp=inf;
for(int i=from[t];i;i=from[e[i].from]) tmp=min(tmp,e[i].v);
mincost+=d[t]*tmp;
for(int i=from[t];i;i=from[e[i].from]){e[i].v-=tmp;e[i^].v+=tmp;}
}
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();k=read();
s=;t=n+;
for1(i,n)a[i]=read();
insert(s,,k,);insert(n-m+,t,k,);
for1(i,m)insert(,i+,,-a[i]);
for2(i,m+,n-m)insert(i-m+,i+,,-a[i]);
for2(i,n-m+,n)insert(i-m+,n-m+,,-a[i]);
for1(i,n-m+)insert(i,i+,inf,);
mcf();
printf("%d\n",-mincost);
return ;
}
vijosP1499炸毁燃料库的更多相关文章
- BZOJ-2257 瓶子和燃料 分解因数+数论方面乱搞(裴蜀定理)
一开始真没想出解法...后来发现那么水.... 2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 970 So ...
- BZOJ 2257: [Jsoi2009]瓶子和燃料 裴蜀定理
2257: [Jsoi2009]瓶子和燃料 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- bzoj2257 [Jsoi2009]瓶子和燃料 最大公约数
[Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1449 Solved: 889[Submit][Status][Di ...
- BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】
2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1326 Solved: 815[Submit][Stat ...
- bzoj2257: [Jsoi2009]瓶子和燃料
2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec Memory Limit: 128 MB Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了 ...
- [BZOJ 2257][JSOI2009]瓶子和燃料 题解(GCD)
[BZOJ 2257][JSOI2009]瓶子和燃料 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子 ...
- [JSOI2009]瓶子和燃料
Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N& ...
- [BZOJ1441&BZOJ2257&BZOJ2299]裴蜀定理
裴蜀定理 对于整系数方程ax+by=m,设d =(a,b) 方程有整数解当且仅当d|m 这个定理实际上在之前学习拓展欧几里得解不定方程的时候就已经运用到 拓展到多元的方程一样适用 BZOJ1441 给 ...
- BZOJ-2257:瓶子和燃料(裴蜀定理)
jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy的飞船上共有 N个瓶子(1<=N<=1000) ,经过 ...
随机推荐
- 用Lighttpd做图片服务器
http://www.lsanotes.cn/install_lighttpd 用Lighttpd做图片服务器 一.安装lighttpd所需的库文件1.安装 pcrewgetftp://ftp.csx ...
- HDU1097 A hard puzzle
A hard puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- PHP 发布两个不用递归的树形数组构造函数(转)
<?php/** *创建父节点树形数组 * 参数 $ar 数组,邻接列表方式组织的数据 $id 数组中作为主键的下标或关联键名 $pid 数组中作为父键的下标或关联键名 * 返回 多维数组 ** ...
- CreateProcess函数具体解释
CreateProcess说明:WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程执行指定的可执行文件. 函数原型:BOOL CreateProcess( ...
- 基于SSH的数据库中图片的读写
近期项目中遇到了这个问题,网上查了一些资料所谓是零零散散,这里写篇博文做个笔记. 注:这篇博文中部分类的属性声明未列出,应该不算难,基本都是以private 类型 名称 格式声明,然后配getter ...
- 线程、委托、lambda运算符的简单示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Swift还是Objective-C
Swift还是Objective-C Swift还是Objective-C? Swift语言发布已经两年了,iOS开发需要学习C或者Objective-C.此外,人们似乎还在迷惑Swift到底适合 ...
- TwoSAT算法模板
该模板来自大白书 [解释] 给多个语句,每个语句为“ Xi为真(假) 或者 Xj为真(假)” 每个变量和拆成两个点 2*i为假, 2*i+1为真 “Xi为真 或 Xj为真” 等价于 “Xi为假 –& ...
- SPOJ 4053 - Card Sorting 最长不下降子序列
我们的男主现在手中有n*c张牌,其中有c(<=4)种颜色,每种颜色有n(<=100)张,现在他要排序,首先把相同的颜色的牌放在一起,颜色相同的按照序号从小到大排序.现在他想要让牌的移动次数 ...
- 提升升级 强制更新 Download
Activity和广播 /** 下载APK细节 1.点击升级后对话框不消失,再次点击时不能重复下载 2.下载过程中退出APP,下次进入应用后要重新下载(因为可能不完整) 3.下载过程中退出APP(或下 ...