Evanyou Blog 彩带
上一页 1 ··· 4 5 6 7 8 9 10 下一页
摘要: "传送门啦" 一个树上dp(树上背包问题),我用了两个方法,都A掉了,这个题数据可能太水了,第一次打错了都A了,不过错误已经改掉了。 第一次就是用的树上背包,差不多是裸题了吧。 $ f[i][j] $ 表示以 $ i $ 为根的子树中选 $ j $ 个的最优方案,因为我们建立了一个虚点,所以最后用了 阅读全文
posted @ 2018-10-30 20:09 Stephen_F 阅读(135) 评论(0) 推荐(0) 编辑
摘要: "传送门啦" 这个题就快好多,这次打的代码相比较旅行商的背包,我用了预处理,先处理成01背包,然后直接dp。 没有在dp中进行,可能会快一点吧。 include include include include using namespace std; const int maxn = 1e4 4 + 阅读全文
posted @ 2018-10-30 16:37 Stephen_F 阅读(169) 评论(0) 推荐(0) 编辑
摘要: "传送门啦" 这个题不用二进制优化的话根本不行,现学的二进制优化,调了一段时间终于A了,不容易。。 如果不懂二进制优化的话可以去看我那个博客 "二进制优化多重背包" 入口 不想TLE,不要打memset,一定要用快读,听别人说不用快读卡三个点,幸亏我习惯打快读。 include include in 阅读全文
posted @ 2018-10-30 15:57 Stephen_F 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 此题之前先分析两种常见的背包问题,01背包与完全背包 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品之多拿一件。 解决方案 考虑用动态规划的方法来解决,这里的: 阶段是:在前N件物品中,选取若干件物品放入背包 阅读全文
posted @ 2018-10-30 15:41 Stephen_F 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 优化多重背包的方式中两种常用的是单调队列和二进制优化,今天主要学习了一下二进制优化(征集各方资料)。 先说下 01 背包,有n 种不同的物品,每个物品有两个属性 :$ size $ 体积,$ value $ 价值,现在给一个容量为 $ w $ 的背包,问 最多可带走多少价值的物品。 int f[w+ 阅读全文
posted @ 2018-10-30 15:40 Stephen_F 阅读(479) 评论(1) 推荐(1) 编辑
摘要: "传送门啦" 这个题本质就是跑一边最长路,重点就是在怎么建图上。 我们可以把点权放到边权上面,即将每一个边的终点点权当做这个边的边权,这个题里就是将工钱 $ d $ 当做边权。 如果这一条边需要坐飞机才能到达,我们就可以将 $ d w $ 当做边权进行建图,这个时候你发现了什么?? 你会发现 $ d 阅读全文
posted @ 2018-10-30 11:00 Stephen_F 阅读(112) 评论(0) 推荐(0) 编辑
摘要: "传送门啦" 一道广度优先搜索的题目。 结构体含义: struct node{ int x,y,dir;//坐标,方向 int step;//当前步数 }; 方向的标号受上面定义的 $ dx[ ] , dy [ ] $ 数组 的影响 这个题要注意的就是初始化起点的问题。 起点可以向右、右下、下三个方 阅读全文
posted @ 2018-10-30 09:13 Stephen_F 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目意思就是:最大化一个区间的和与这个区间的最小值的乘积。 换一个角度看问题,如果我们穷举一个最小值 $ a_i $ ,然后往左右扩展,显然是对的,复杂度 $ O(n^2) $。所以我们要优化一下这个过程。 首先扩展这个过程的原则就是所有加入这个区间的数都必须小于选定的最小值 $ a_i $,那么我 阅读全文
posted @ 2018-10-29 20:06 Stephen_F 阅读(100) 评论(0) 推荐(0) 编辑
摘要: "传送门啦" 首先要将第n个盘子从x到y,那么就要把比n小的盘子全部移到6 x y,然后将n移到y 仔细想想:6代表的是3根初始柱,3根目标柱。 6 (x+y) 便是我们的中转柱了,因为到这个位置是最优的。 感觉题目有锅啊。 include include include include using 阅读全文
posted @ 2018-10-29 19:30 Stephen_F 阅读(240) 评论(0) 推荐(0) 编辑
摘要: "传送门啦" 这个题总体思路就是先搜索在 $ dp $ void dfs(int keep,int now){ //使用 放弃 if(now m) return; //已经放弃超过m个了,就退出 if(keep == n){ if(now == m) dp(); return ; } ///如果搜索 阅读全文
posted @ 2018-10-29 18:37 Stephen_F 阅读(170) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 下一页