思维
Rancho__
这个作者很懒,什么都没留下…
展开
-
试题编号: 201803-4 试题名称: 棋局评估 (对抗搜索 博弈)
这题真的是一道很不错的题,首先我对题意的理解有点问题,我以为的最优策略是,用最优的策略取胜,但是题目的意思是用最优的策略取得最好的得分。到哪个人行棋,就暴搜哪个人的可选的每一步,然后比较下一个人行棋所得的结果,取最优。例如当alice行棋时,就让alice下一步棋的得分取bob最优行棋的分数,然后alice有不同的点可以下,就让alice下一步走法的最优解等于alice走完下一步之后,对应的b...原创 2019-12-23 20:30:21 · 240 阅读 · 0 评论 -
1018 Public Bike Management (30分) (迪杰斯特拉+dfs)
思路就是dijkstra找出最短路,dfs比较每一个最短路。dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关,所以可以用下面的写法,看代码就可以了。最开始的时候是想用一个偏动态规划的写法做,但是因为题目的显示,既要带去的车数量最少,又要求从一个点带走的车数量最少,所以如果过动规的话,对于一个点的多个最短路,...原创 2019-12-21 17:01:55 · 137 阅读 · 1 评论 -
PAT 1014 Waiting in Line (30分) 一个简单的思路
这题写了有一点时间,最开始想着优化一下时间,用优先队列去做,但是发现有锅,因为忽略了队的长度。然后思考过后,觉得用时间线来模拟最好做,先把窗口前的队列填满,这样保证了队列的长度是统一的,这样的话如果到某个时间,队首的人已经服务完了,这样这个队列的长度就减少一,这就变成了所有队列中长度最短的队列,所以直接向这个队列里面添加一个人就可以了。按照从小到大轮询窗口的话,这样正好符合题中的要求,就是队列...原创 2019-12-20 09:50:56 · 108 阅读 · 0 评论 -
LeetCode 42接雨水 按行求解(差分+排序)
按行求解的思路比较清晰明了,但是这个方法的复杂度高达O(heightSize*sum(height[i])),几乎高达O(N^2)。但是也并不是不可以解决,经观察我们可以发现,这个算法的缺点在于要遍历每一个柱体的每一个高度,所以解决的时就要从这个点着手。设之前已经存在的柱体的最高高度为bp,当前柱体的高度为h,则如果h<=bp,说明该高度和它以下的高度已经出现过,我们更新该高度的end位...原创 2019-09-19 17:15:42 · 220 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 M. Longest subsequence(思维+序列自动机)
序列自动机跑s串假设k为s和t相同的长度,初始时相同长度为0取s串中大于t[i]的最左边的位置,用n-tmp+1+i-1更新答案,tmp是最左端的位置然后去t[i]相等的位置,走到下一位,如果下一位的位置不存在或者在tmp的右边,跳出循环即可。最后就是s串中找出了一个和t串相同的串,之后的长度只要不为0,也是可以用来更新答案的。#include <bits/stdc++.h>...原创 2019-09-24 20:25:56 · 126 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team(排序+二分)
这题其实就是瞎搞,稍微想一想改一改就能过。排序按值的大小排序,之后从后向前更新node节点的loc值,如果后一个节点的loc大于(不会等于)前#include <bits/stdc++.h>using namespace std;const int maxn=5e5+10; struct Node { long long val,loc;}node[maxn];lo...原创 2019-09-28 10:12:50 · 96 阅读 · 0 评论