ZOJ 3627 Treasure Hunt II (贪心,模拟)
题意:有n个城市并排着,每个城市有些珠宝,有两个人站在第s个城市准备收集珠宝,两人可以各自行动,但两人之间的距离不能超过dis,而且每经过一个城市就需要消耗1天,他们仅有t天时间收集珠宝,问最多能收集多少珠宝?
思路:
其实就是类似一个滑动窗口在收集一个序列上的权值。首先两个人可以同时往两边散开,直到极限距离dis(这样省时),然后他们可能往左/右走,也可能往左走一会儿再往右走,也可能往右走一会儿再往左走。可以看出其实这些考虑都是对称的,那么我们主要考虑1边就行了。可以尝试枚举往左边走k天,其他t-k天往右走(利用前缀和)。注意有可能dis是个奇数的,那么在t充足的情况下,应该两边扩展到dis-1就停下呢,还是往左/右一点呢?还得靠枚举,左边试一下,右边试一下。dis也可能比t还大,那么最多也就是同时往两边扩展t天。
情况不算多,但是写起来还是得很小心的。还有,数据必须用longlong了。对称情况只需要反转一下序列,改变一下起点s。时间复杂度O(n)。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=;
const double PI = acos(-1.0);
LL w[N], sum[N];
int n, dis, s;
LL get_ans(int p1,int p2,int t)
{
LL big=sum[p2]-sum[p1-];
LL ans=big;
for(int k=; k<p1&&t>=k; k++) //枚举给左边k天,其他给右边
{
LL left=sum[p1-]-sum[p1-k-], right=;
int r=t-*k; //若大于0,则可继续往右走
if( r> ) right=sum[min(n,p2+r)]-sum[p2]; //右边还能获得珠宝
ans=max(ans, big+left+right);
}
return ans;
} LL cal(int t) //初始定点p1,p2必须拉到最长
{
int p1=max(, s-min(dis/,t));
int p2=min(n, s+min(dis/,t));
LL ans=;
t-=dis/;
if(dis%==) //奇数
{
if( t< || p1==&&p2==n ) return get_ans(p1,p2, t); //t已无剩
if( p1> ) ans=max(ans, get_ans(p1-,p2, t-)); //左坑
if( p2<n ) ans=max(ans, get_ans(p1,p2+, t-)); //右坑
}
else //偶数,不需要占坑
{
ans=max(ans, get_ans(p1,p2, t));
}
return ans;
} int main()
{
freopen("input.txt", "r", stdin);
int t;LL ans;
while(~scanf("%d%d",&n,&s))
{
memset(sum, , sizeof(sum));
for(int i=; i<=n; i++)
{
scanf("%d",&w[i]);
sum[i]+=sum[i-]+w[i];
}
scanf("%d%d",&dis,&t); //dis是两人的距离上限,t是所有的时间
ans=cal(t); reverse(w+,w+n+); //反过来继续求。
memset(sum, , sizeof(sum));
for(int i=; i<=n; i++) sum[i]=sum[i-]+w[i];
s=n+-s;
ans=max(ans, cal(t));
cout<<ans<<endl;
}
return ;
}
AC代码
ZOJ 3627 Treasure Hunt II (贪心,模拟)的更多相关文章
- zoj 3627 Treasure Hunt II (贪心)
本文出自 http://blog.csdn.net/shuangde800 题目链接:zoj-3627 题意 直线上有n个城市, 第i个城市和i+1个城市是相邻的. 每个城市都有vi的金币. ...
- zoj 3629 Treasure Hunt IV 打表找规律
H - Treasure Hunt IV Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- ZOJ 3626 Treasure Hunt I 树上DP
E - Treasure Hunt I Time Limit:2000MS Memory Limit:65536KB Description Akiba is a dangerous country ...
- ZOJ 3626 Treasure Hunt I(树形dp)
Treasure Hunt I Time Limit: 2 Seconds Memory Limit: 65536 KB Akiba is a dangerous country since ...
- 【ZOJ3627】Treasure Hunt II
题目大意:给定一个长度为 N 的序列,现有两个人从 P 点出发,每个单位时间每个人最多可以移动一个单位,两人之间的最大距离不能超过 M,一共有 T 单位的时间,求在合法情况下,两人可以获得的序列点权和 ...
- ZOJ 3626 Treasure Hunt I (树形DP,常规)
题意:给一棵树,一个人站在节点s,他有m天时间去获取各个节点上的权值,并且最后需要回到起点s,经过每条边需要消耗v天,问最少能收获多少权值? 思路: 常规的,注意还得跑回原地s. //#include ...
- zoj 3627#模拟#枚举
Treasure Hunt II Time Limit: 2 Seconds Memory Limit: 65536 KB ...
- 贪心+模拟 ZOJ 3829 Known Notation
题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...
- zoj Treasure Hunt IV
Treasure Hunt IV Time Limit: 2 Seconds Memory Limit: 65536 KB Alice is exploring the wonderland ...
随机推荐
- 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构
Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...
- java集合框架之聚合操作stream
参考http://how2j.cn/k/collection/collection-aggregate/702.html#nowhere 聚合操作 JDK8之后,引入了对集合的聚合操作,可以非常容易的 ...
- Flutter实战视频-移动电商-09.首页_项目结构建立和获取数据
09.首页_项目结构建立和获取数据 在config下创建service_url.dart 用来配置我们后端接口的配置文件 一个变量存 接口地址,一个接口方法地址 所有后天请求数据的方法都放在这个文件夹 ...
- PHP实用小程序(三)
<HTML> <HEAD> <TITLE>给数组增加元素</TITLE> </HEAD> <? $Cities[] = "& ...
- 【转】NET中管理数字证书(Digital Certificate)的一些类
http://blog.csdn.net/bat800/article/details/2314510 http://blog.csdn.net/zjlovety/article/details/72 ...
- URAL1222
题意: 把n拆分成几个数,把这些数乘起来最大. 思路: 3越多越好. 对4,5特判一下,4的时候是2*2大,5的时候还剩个2,那么就是n%3=1的话,我们先拿个4,n%3==2的话就是先拿个2,后面把 ...
- C#异步调用的应用实践浅谈
C#异步调用的应用实践最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用C#异 ...
- c# UserControl 如何在父窗口中显示Scroll
1. UserControl 不应该是Dock = Fill, 而应该使用 Anchor 2. 父窗口(或者父控件,或者容器)的AutoScroll = True 3.UserControl 加入容器 ...
- 编译出现No rule to make target `out/host/linux-x86/bin/aapt', needed by `out/target/common/obj/APPS/MyTv4_intermediates/src/R.stamp'问题
查找路径发现的确没有MyTv4_intermediates/src/R.stamp,这需要生成这个文件
- Mybatis分页中遇到的坑2
站在巨人的肩膀上 http://crocutax.com/blog/mybatis-one-to-many-nestes-query-and-page-query Mybatis一对多嵌套查询和 ...