博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lightoj1084【DP啊DP】
阅读量:4583 次
发布时间:2019-06-09

本文共 926 字,大约阅读时间需要 3 分钟。

题意:

给你n个人的位置,每个人最多移动k个单位,然后在某点>=3人可以抱团,问你这n个人最少抱团数,只要有一个n不能抱团输出-1;

思路:

感觉又是超级超级狗血。。。。

剪不断,理还乱。。。

现对人的位置拍个序

一开始想的是贪心,纯粹因为n1e5...,然后思路是对于每个位置搞一下,能延伸的最远距离,然后自然而然GG,位置没有办法。

后面去想对于每个人,向两边延伸最长距离,然后状态转移GG= =、

然后想前i个人,后面副参考窝大哥的博客,他是以第i个人为左边界,然后右边界的位置就是pos[i]+2*k,然后在数组里面找一下这个位置的人的位置,两个人区间人数>=3,然后取最小就好了;

#include 
using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pair
PII;const double eps=1e-5;const double pi=acos(-1.0);const int INF=0x3f3f3f3f;const int N=1e5+10;int f[N],a[N];int n,k;int dfs(int i){ if(f[i]!=-1) return f[i]; if(i==n) return f[i]=0; int pos=upper_bound(a,a+n,a[i]+k)-a; f[i]=INF; for(int j=pos;j-i>=3;j--) f[i]=min(f[i],1+dfs(j)); return f[i];}int main(){ int T,cas=1; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(int i=0;i

转载于:https://www.cnblogs.com/keyboarder-zsq/p/6777503.html

你可能感兴趣的文章
stray '\343' in program 编译错误
查看>>
生成网站,如何不生成.pdb文件?
查看>>
互联网项目管理要点
查看>>
WPF,Silverlight与XAML读书笔记第三十二 - 可视化效果之布局定位
查看>>
MapReduce入门小例子
查看>>
纪中2016.10.29比赛总结
查看>>
jzoj100048. 紧急撤离
查看>>
令人疑惑的 std::remove 算法
查看>>
Int..的范围
查看>>
HDU 2585 [Hotel]字符串递归处理
查看>>
ffmpeg 编码h264 profile如何设置为baseline的问题
查看>>
CSharper 学Quick-Cocos2d-X (一) 开发环境的搭建
查看>>
PoolThreadCache
查看>>
使grub4dos引导启动linux
查看>>
P2597 [ZJOI2012]灾难
查看>>
LeetCode--LinkedList--206. Reverse Linked List(Easy)
查看>>
最短路径
查看>>
Console-算法[for,if]-一水仙花数(Water flower)
查看>>
IntelliJ-IDEA和Git、GitHub、Gitlab的使用
查看>>
Request——Node世界中被依赖最多的库No.2
查看>>