题目大意
在一条直线(或编号轴)上从起点出发,每次可以从位置 跳到 ,要求跳跃长度在区间 内。每到达一个位置会获得或损失对应的分值。问到达“终点对岸”(位置编号超过 )时,能得到的最大总分。
AC代码
比较裸的子序列提取dp(子序列为 [ i-r , i-l ] ),唯一需要注意的是
只要她下一步的位置编号大于N就算到达对岸。
所以你的dp范围要扩大一点
1 |
|
在一条直线(或编号轴)上从起点出发,每次可以从位置 j 跳到 i,要求跳跃长度在区间 [l,r] 内。每到达一个位置会获得或损失对应的分值。问到达“终点对岸”(位置编号超过 n)时,能得到的最大总分。
比较裸的子序列提取dp(子序列为 [ i-r , i-l ] ),唯一需要注意的是
只要她下一步的位置编号大于N就算到达对岸。
所以你的dp范围要扩大一点
1 | #include <iostream> |
给定若干次“鼹鼠出现”的信息:每次出现的时间 Ti 与坐标 (Xi,Yi)。初始在某个位置,每次可以在单位时间内移动一定距离(等价于曼哈顿距离不超过时间差)。问最多能打到多少只鼹鼠。
思路见洛谷进阶篇P227
注释也算写的比较详细
1 | #include <iostream> |
给定长度为 n 的序列 A,求其最长严格上升子序列(LIS)的长度。
该题目实际上是要求最长上升子序列严格递增
AC https://www.luogu.com.cn/record/183531657
实际上我这题做法是O(n^2)的,不能通过下面这题。
1 | #include <iostream> |
给定一串导弹的高度序列(按到达顺序)。
1)求最多能用多少套“拦截系统”把所有导弹拦截完(每套系统只能拦截一个不升的序列)。
2)求这串序列的最长严格上升子序列长度。
输出两行分别为上述两个答案。
根据题意,我们要求最长单调子序列
个人认为讲的比较好的leetcode题解,贪心
这种做法即维护了接纳信息,又维护了长度信息,一举两得。
然后注意写a.begin(),不要写begin(a),前面的是C++98写法
AC. https://www.luogu.com.cn/record/183637393
1 | // https://www.luogu.com.cn/problem/P1020 |
给定 n 个人,每个人有一个所属组别 teami∈{1,2,3} 和一个权重 si。需要把所有人重新分到 3 组,使得每组权重和都等于总和的 1/3,并且最少改变人数(把一个人从原组分到别组算一次改变)。输出最少改变数;若无法平分则输出 −1。
具体思路见此视频
【AtCoder 初学者竞赛 375比赛讲解】 【精准空降到 1:09:56】 https://www.bilibili.com/video/BV1UR26YnEpX/?share_source=copy_web&vd_source=6ca0bc05e7d6f39b07c1afd464edae37&t=4196
1 | // E - 3 Team Division |