终于考完了…又开始康复训练了,
纯菜,发现很多东西去年会写的今年已经不会了,我完蛋了
算了,写点东西下来吧
依然在看雨巨的算法入门课
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我怎么还在入门啊
花店橱窗
传送门:花店橱窗
题意自己看去吧
线性dp+还原
表示第i个花放在j花瓶的最大美观程度,但是必须知道第i-1个花放在了哪里,才能推出i的情况,怎么做呢,暴力枚举吧:
从第一个花瓶开始向后,当前f[i] [j]的值为:i-1朵花放在k且第i朵放在j时的最大值(注意判断边界条件)
状态转移:
答案就是扫一遍最后一行,取一个最大值
还原方法:按照dp倒退回去就行
贴个代码
1 |
|
传球游戏
传送门:传球游戏
这题就是一个很简单的线性dp,状态转移方程很好想,因为每次只能传给左右两边,所以就讲上一次在左边的情况加上上一次在右边的情况即可。
dp[i] [j]为第i次传球在j手上的方法数
需要注意的是,所有人是一个圈,所以还需要mod一下,用0表示n
1 |
|
合唱队列
传送门:合唱队列
最长上升子序列问题,从左到右算一遍,再从右到左算一遍最长下降子序列,以i为分界,左边的最大上升子序列+右边的最大下降子序列,因为都包含i,所以要减一
1 |
|
拦截导弹
传送门:拦截导弹
这题很好看出第一问是一个最长不上升子序列,但是第二问还挺难想的
贴一个我觉得讲的很好的题解点击
这题卡了一下LIS的时间复杂度,dp的方法是,用dp+贪心+二分只要
都贴一下代码吧
1 |
|
第二种方法,具体解释那个帖子里也有
1 |
|
数学考试
传送门:数学考试
这题我感觉…怎么说呢 感觉很暴力
先统计一下以i为起点,长度为k的字段和为多少
然后从左到右求一下以i为分割,左边的最大值
从右往左再求一下i右边的最大值
再遍历一遍,就得到答案了
后面看了一下别的题解,可以用前缀和优化一下(55555我又没想到,感觉这个挺好想的呀)
WA了几发在数据范围上…为什么我又不开longlong啊
1 |
|
小A买彩票
传送门:小A买彩票
…这题好像是之前天梯赛选拔一模一样的题目 好像当时dfs搜的还是干嘛的 没出的来
现在一看 这不还是简单dp吗 dp[i] [j]表示第i张彩票赚j元的情况
dp[i] [j]=dp[i-1] [j-1]+dp[i-1] [j-2]+dp[i-1] [j-3]+dp[i-1] [j-4]
特判需要注意下
1 |
|
购物
传送门:购物
dp[i] [j]表示第i天买j东西的最少费用
首先要对每天的东西进行一个排序,要是一定要买2个糖,肯定买便宜的啊
用一个mai[i] [j]数组记录一下第i天买j个糖花的钱
转移方程:dp[i] [j]=min(dp[i] [j],dp[i-1] [k]+mai[i] [j-k]+(j-k)*(j-k))
k就是枚举的每天买的糖
注意一下边界条件 必须保证i天有i个糖
有点像那个花店橱窗 发现我每次到暴力的时候反而不知道怎么写了…
1 |
|
采药
传送门:采药
其实感觉我对于背包问题的理解一直不是特别透彻,我会写题,但是感觉就是很钝,借这题梳理一遍。
这题就是经典的01背包问题
dp[i] [j]选前i个物品所占体积j的最大价值
两个状态:选第i个物品或者不选第i个物品,从i-1的状态转化过来。注意:如果没有办法舍弃原先的体积选择装入该物品(就是已用体积比w[i]小)还是要继承前面i-1的情况的。
先说一下这里的初始化有两种情况,如果题目问的是恰好最后体积为V,那么初始化就要设置为-INF,而如果不需要恰好,可以初始化为0,就好比一开始给每个位置占任意体积的空气一样。
贴个代码
1 |
|
进一步可以优化空间复杂度
我们发现每一次i的更新只与i-1有关,那么其实不需要记录前面i-2甚至更远的数据,可以采用01滚动的方式,当然,其实直接降成一维的也可以,我们注意到,
失衡天平
传送门:失衡天平