自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 HDU1074(状压DP入门题)

这道题关于字典序为什么要逆序,还有如何记录状态路径做了示范,是一道非常有启发的题目。

2022-11-24 20:47:30 151

原创 HDU1069

DP[i]表示以i为最高点箱子的最大值。

2022-11-24 17:48:20 112

原创 HDU1024

思想:这道题要用到第二个dp数组,dpb表示m-1轮,前j个中最大的dp值,还有在更新dpb的时候,我的数组有2种方式,错误的那一种是可能用到了未知值,DP的时候一定要避免未知值的发生。

2022-11-24 16:33:52 95

原创 tourist用vector实现邻接表

【代码】tourist用vector实现邻接表。

2022-11-23 20:52:14 146

原创 扩展kmp模板

【代码】扩展kmp模板。

2022-11-12 20:28:46 75

原创 蓝桥杯-作物杂交

这道题把目标节点当做一棵树的根节点,然后2条边同时遍历提取信息,做dfs,把信息放在对应边的节点上而不是边上,是一道非常有启发的题!

2022-11-10 10:36:14 382

原创 蓝桥杯-装饰珠

一个抽象的分组背包问题,然后最后的解是要遍历所有DP数组,而不是只有最后一个,因为背包在遍历的过程中扩大了!具体为什么我也不清楚。

2022-11-09 16:55:41 291

原创 You Are the One HDU - 4283

这道题真的是给人启迪的一道题。这道题的dp状态设计为dp[i][j]表示一个区间的最优值接着,我们便要思考状态转移方程,对于区间dp的传统来说要遍历断点,我以前从未思考过为什么要遍历端点,今天这道题就给了人非常好的启发。首先我想的是随便找一个k,然后把前后区间加起来再加上后面区间没有加上的屌丝值。当测试数据时,发现答案不对,这个时候便思考为什么?于是,发现如果一个大状态由几个小状态合作产生,那么一定要证明这个大状态一定是最优的。拿这道题举例,如果这个产生大状态,当合并时,可能会造成每个小区间的策略发生了变化

2022-06-11 23:20:33 100

原创 Food Delivery ZOJ - 3469

思想:做DP的题一定要多观察,遇到瓶颈一定要多观察和理解。要十分注意DP的值到底是个什么意思,小状态与大状态之间到底有什么联系,把所有可能的联系都要想到。且小状态到大状态的转移一定是一个合法的过程。合法的含义要具体问题具体分析。首先观察到,不论起点在哪,外卖员最后一站一定是在坐标轴的左右2端且决策的过程一定是一个左右左右来回摆动的过程。无论哪一个小区间,都一定会停留在左右2端。想错的时候总是误以为可能会有停留在中间这样的结果,但仔细思考发现并没有。dp定义为dp[i][j][d],d表示最后一个点是区间的左

2022-06-08 15:36:34 58

原创 Coloring Brackets CodeForces - 149D

思想:dp的定义为dp[l][r][lc][rc],表示此区间一定为正确的括号匹配,从l到r区间,l位置上色为lc,r位置上色为rc的上色总方案数。这道题与传统的区间DP不同,传统的区间DP枚举的是区间的长度,找断点。而对于这道题来说,需要找的是符合一个正确括号匹配的小区间来得到大区间的值,要排除不符合要求的小区间情况。通过观察得知,区间的合并不可能是相交的,只可能是包含与并列的关系。这个博客的图画的非常好:Codeforces149 D. Coloring Brackets(区间dp,合法括号序列性质)_

2022-06-05 20:53:04 144

原创 Halloween Costumes LightOJ - 1422

对于状态转移方程,将情况考虑为第j天的衣服是否穿上,通过这样的条件分类,能够涵盖所有的情况,因为无论如何定义DP,一定会考虑j天的衣服穿与不穿这样的情况,我一开始瞬间的想法就是背包问题。如果穿上那么DP[i][j]=DP[i][j-1]+1很简单。但难点是不穿上第j天的衣服时该如何考虑?如果不穿第j天的衣服,那么j的前面一定有相同的衣服,这个时候就是要把那天的衣服穿在身上,然后到第j天的时候脱掉之后的衣服。这便是k的定义。DP[i][j]=DP[i][k]+DP[k+1][j-1]DP[i][k]表示第i天

2022-06-04 20:53:47 60

原创 Multiplication Puzzle POJ - 1651

定义K为一个区间内最后一个被拿出的数字

2022-06-04 19:07:45 56

原创 Brackets POJ - 2955

这道题是关于无后效性的理解。状态转移的时候一定要涉及所有的情况,其次某个几个状态推出一个新的状态的值时,不一定最好,这里一定不要快速否决了想法。只要不违背状态的转移只与值有关而不与路径有关。仔细想想,遍历断点并把2个区间加起来的确能够基本包含所有的情况并找到最优值,但的确还遗漏了一种情况吗,便是若区间2端点括号匹配,这样便找到了所有情况。.........

2022-06-04 19:06:01 85

原创 Tree POJ - 1741(点分治)

POJ-1741 (点分治模板)

2022-06-01 14:53:54 107

原创 Cake ZOJ - 3537

思想:先用Graman算法判断栈里的数量和N是否一样,从这里可以看出当走到最后一个点时,终点和起点连起来一定是凸的不是凹的。然后要把一个多边形用到DP上去,这里的角度有2个,一个是从边的角度,一个是从顶点的角度,但是边的角度最后也要落实到角上,倒不如直接用角来定义状态更为简单。DP定义2个状态,代表从i这个顶点出发,一直走到j这个顶点时,多边形划分最优三角形的最小值。其子问题一定是最优的且满足无后效性。这个是一个很明显的区间DP,如何将每一个划分可能列举出来是最难的,通过观察:核心思想为凸多边形

2022-05-31 15:22:13 72

原创 P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包(Graham算法)

#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;const int v=1e5+10;int n;struct point{ double x,y;}p[v],s[v];///s代表手写栈double check(point a1,point a2,point b1,point b2)///代表2个向量的.

2022-05-30 20:22:54 96

原创 石子归并 V2 51Nod - 1022

#include<iostream>#include<stdio.h>#include<cstring>#define INF 0x7fffffffusing namespace std;const int m=2100;int dp[m][m];///定义在区间(i,j)内的最优值int o[m][m];int stone[m];int sum[m];///定义前缀和,用来求,2个堆这一次的合并值int main(){ int n; .

2022-05-30 15:46:55 63

原创 石子归并 51Nod - 1021

#include<iostream>#include<stdio.h>#include<cstring>#define INF 0x3f3f3fusing namespace std;const int m=1001;int dp[m][m];///定义在区间(i,j)内的最优值int stone[m];int sum[m];///定义前缀和,用来求,2个堆这一次的合并值int main(){ memset(dp,INF,sizeof(dp.

2022-05-28 21:45:55 53

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除