正题

题目大意:https://www.luogu.org/problemnew/show/P3575


题目大意

一个环,上面有若干个点,若干个询问xxx。
表示上一个降落点和下一个降落点距离不能超过xxx,然后求至少要降落多少次(起点可以任意)


解题思路

首先明显环形dpdpdp,然后断环成链,复制一份放到后面,预处理距离前缀和数组sumsumsum。
然后考虑贪心设lastilast_ilasti​数组,定义dpidp_idpi​表示lasti∼i(i>n)last_i\sim i(i>n)lasti​∼i(i>n)这段范围的降落次数,然后优先飞最远。也就是jjj是iii的最前的降落地点。因为jjj满足单调性,所以就可以O(n)O(n)O(n)的预处理出来(或者在dpdpdp的时候处理)。然后首先显然
dpi=dpj+1dp_i=dp_j+1dpi​=dpj​+1
然后因为计算上了dpjdp_jdpj​,所以要从lastjlast_jlastj​开始也就是
lasti=lastjlast_i=last_jlasti​=lastj​
然后当i−lasti>=ni-last_i>=ni−lasti​>=n时就是答案了。


codecodecode

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2000100;
ll n,t,imp;
ll sum[N],dp[N],last[N];
void get_answer(ll l){if(l<imp){printf("NIE\n");return;}for(ll i=n+1,j=1;i<=2*n;i++){while(sum[i]-sum[j]>l) j++;dp[i]=dp[j]+1;last[i]=last[j];if(i-last[i]>=n){printf("%lld\n",dp[i]);return;}}
}
int main()
{scanf("%lld%lld",&n,&t);for(ll i=1;i<=n;i++){last[i]=i;scanf("%lld",&sum[i]);imp=max(imp,sum[i]);sum[i+n]=sum[i];sum[i]+=sum[i-1];}for(ll i=n+1;i<=2*n;i++)sum[i]+=sum[i-1];for(ll i=1;i<=t;i++){ll l;scanf("%lld",&l);get_answer(l);}
}

P3575-[POI2014]DOO-Around the world【环形dp】相关推荐

  1. codevs1085数字游戏(环形DP+划分DP )

    1085 数字游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在 ...

  2. 【环形dp】poj 2228 Naptime

    题目链接 题意:一天分为N个时间片(可顺到下一天->环形),选择其中B个睡觉.选择第i个时间片能获得u_i点值,但是选择的一个区间内的第一个时间片用来入睡(没睡着),无法获得u_i值.问最大能获 ...

  3. FUZ-2204-7环形dp

    个人博客链接:https://blog.nuoyanli.com/2020/04/02/fuz2204/ 原题链接 http://acm.fzu.edu.cn/problem.php?pid=2204 ...

  4. poj 2228 环形DP

    题意: 一天有n个时间,有一只牛希望一天可以休息睡小时.如果牛在第i时刻已经熟睡,他可以得到ui的休息.但是如果他在i时刚刚入睡,他不能得到休息.牛可以从前一天晚上睡到第二天.睡觉时间也不一定连续.问 ...

  5. Vijos1451圆环取数[环形DP|区间DP]

    背景 小K攒足了路费来到了教主所在的宫殿门前,但是当小K要进去的时候,却发现了要与教主守护者进行一个特殊的游戏,只有取到了最大值才能进去Orz教主-- 描述 守护者拿出被划分为n个格子的一个圆环,每个 ...

  6. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...

  7. poj2228Naptime——环形DP

    题目:http://poj.org/problem?id=2228 dp[i][j][0/1]表示前i小时中第j小时睡(1)或不睡(0)的最优值: 注意第一个小时,若睡则对最终取结果有要求,即第n个小 ...

  8. 【BZOJ】4543: [POI2014]Hotel加强版-长链剖分DP

    传送门:bzoj4543 题解 三点两两距离相等的情况如下图: 设 f [ i ] [ j ] f[i][j] f[i][j]表示 i i i子树中与 i i i距离为 j j j(相对深度为 j j ...

  9. 传球游戏-----环形DP

    题目链接 思路:f[i][j]表示传了i次,且第i次在第j个小朋友手里的方案数 每个状态只能由左右两个小朋友转移而来 顾状态转移方程为:f[i][j]=f[i-1][(j-1+n)%n]+f[i-1] ...

最新文章

  1. 字符常量和仅包含一个字符的字符串之间的区别
  2. Binary Search O(log n) algorithm to find duplicate in sequential list?
  3. 利用intellijidea创建maven多模块项目
  4. python错误提示“TabError: inconsistent use of tabs and spaces in indentation”
  5. powershell如何编程C语言,如何用C语言执行powershell命令
  6. ios 标签 html,ios 显示HTML标签文本
  7. 中国版MSN慈善缘何遇冷:白领网民参与只为时尚(转自--竞报)
  8. 乐高创意机器人moc_乐高MOC作品欣赏:变形金刚及其他
  9. Jumpserver跳板机
  10. Linux档案与目录管理
  11. ELASTIC-PHP + IK分词器 + THINKPHP6 初次使用 (关键词查询)
  12. CDC的DrawText
  13. VR项目unity相关
  14. 组织架构图怎么画?思维导图创作教程分享
  15. matalb读取txt文件以及将数据写入txt文件
  16. 如何运营批量推特账户
  17. 关于kali连不上网络
  18. web网页设计期末课程大作业:环境保护主题网站设计——农业三级带表单带js(14页)HTML+CSS+JavaScript
  19. matlab怎么数值模拟。,matlab的数值模拟方法.doc
  20. 反编译微信小程序错误: $gwx is not defined和__vd_version_info__ is not defined 已解决

热门文章

  1. c语言编程每日一练教程,每日一练 | C语言之指针
  2. java如何用键盘输入_java中如何从键盘输入(附代码)
  3. linux l显示详细信息,fdisk -l显示信息详解
  4. php cbd架构,CBD模式
  5. 捷达vs7测试_捷达VS7——品质硬核!
  6. 百度网页移动端html,百度移动端开始用网站品牌名代替网址显示
  7. uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具
  8. 新增一个主键自增长_MyBatis 示例-主键回填
  9. idea如何导入java工程_Eclipse java web项目 ,导入IntelliJ IDEA 完整操作!
  10. 软件构造学习笔记-第十三周