C/C++
文章平均质量分 64
hhy518518
这个作者很懒,什么都没留下…
展开
-
leetcode 99. Recover Binary Search Tree
//分析若有两个节点是错误的。深度遍历从最深处开始探索//那么他们的公共祖先所在那棵树比如是不合法的//一种是左右两个子树错误的那么找到那两个点//一种是左子树上面的节点和它某个祖先交换了 需要//一种是右子树上的节点和它某个祖先交换了//找到最开始出问题的根节点需要不断的回溯#include#include#includeusing namespace st原创 2017-03-19 12:28:12 · 384 阅读 · 0 评论 -
poj2479分步DP精简成O(n)算法
//提取信息包括从s到t之间的和//但是n较大这样dp[i][j]的形式显然不行,那么如果转换//其实我们除了记录[i,j]之间的和那么可以记录以i开头和以i结尾两种情况//后来发现根本不用记录以什么为开头或者结尾,每次更新前面一段值就行//725K 438MS#include using namespace std;#define MAX_N 50010//static in原创 2015-06-08 21:46:14 · 382 阅读 · 0 评论 -
poj3414有向图的搜索BFS+路径记录
代码偏长只是大体思路//这道题不能深度回溯的方法,因为倒水的状态是有向图//那么只能用宽度搜索的方法//同时我们应该记录路径当找到最优解就退出//388K 0MS#include #include using namespace std;#define MAX_N 103#define For(i,a,b) for(int i=a;i#defin原创 2015-06-26 23:48:29 · 605 阅读 · 0 评论 -
hdoj1176用滚动数组解决的dp
//可以接住的馅饼总数类似poj2385//提取关键信息 时间,位置,当前馅饼的总数//但是信息量教大,那么可以化简为不同时间点,对应的不同位置//可以拥有的馅饼的最大数量//写出后发现可以优化只存储一个发生地点可能的苹果总数//不过也可以转换成树塔类型以5为塔顶,对折,可以联想到数塔了吧?//78MS 6324K #include #include #include#incl原创 2015-06-01 23:17:43 · 397 阅读 · 0 评论 -
hdoj2151简单的计数DP
//一看题目发现跟数塔问题很类似//提取信息 时间 位置 总数//关于计数的简单DP//0MS 1668K #include using namespace std;#define MAX_N 110static int N,P,M,T;static int dp[MAX_N][MAX_N];//记录第i分钟后在第j课树的总情况数目static void DP(){原创 2015-06-03 16:38:56 · 411 阅读 · 0 评论 -
poj3342树形dp+深度搜索并确定唯一性
//树形dp入门题目//使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一//唯一性通过状态数组递归确定//dp[i][0] = ∑max(dp[j][0], dp[j][1]) (j是i的儿子)// dp[i][1] = 1 + ∑dp[j][0] (j是i的儿子) //268K 32MS#include #include #原创 2015-05-27 22:33:34 · 373 阅读 · 0 评论 -
hdoj1160最长上升子序列
//0MS 1688K #include #include #include #include using namespace std;#define MAX_N 1005static struct mice{ int w; int s; int index;}vecs[MAX_N];static int cmp(mice&lhs,mice&rhs){ return原创 2015-05-30 22:19:39 · 443 阅读 · 0 评论 -
POJ2406寻找循环节
寻找循环节其实就是KMP中的NEXT数组的后缀在当前字符串中有多少重循环//5028K 157MS#include #include #include using namespace std;#define MAX_N 1000007static char mol[MAX_N];//模式串static void initNext(int*NEXT){ int p=0原创 2015-05-19 19:07:19 · 530 阅读 · 0 评论 -
poj1961与poj2406同都是寻找循环节
//应该判断是否是循环节就是求的next数组//5032K 172MS#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include using namespace std;#define MAX_N 1000007static char mol[MAX_N];//模式串st原创 2015-05-19 19:09:34 · 372 阅读 · 0 评论 -
hdoj1003注意在寻找最优解对应的时候寻找的顺序
//提取信息起始位置,终止位置,最大和//发现数组较大可以将保存信息改造只存储终止位置//那么dp[i] = max(a[i],dp[i-1]+a[i])//主意要用dp[i-1]<0判断如果小于0那么肯定不用算了这题最先算的是从前到后的//否则直接比较大小的话dp[i]就会出现I,i在前面而不是1-i在前面//46MS 2792K #include #include using原创 2015-06-02 00:21:17 · 592 阅读 · 0 评论 -
HDOJ2059简化记录条件找出问题本质DP
//龟兔赛跑问题提取信息:加油站位置,当前加油站处的油量,到达此地的最短时间//到达每一个事件点的时候查看上一个事件点充或者没充电到达该点的最短时间但是电量记录就会//会繁琐,那么有什么办法可以避免这个问题呢//后来发现其实根本不用管还剩下多少电量,只用看最后一次加油的位置是哪就行了//46MS 1620K #include using namespace std;#define原创 2015-06-03 16:03:01 · 347 阅读 · 0 评论 -
poj2836状态压缩DP+批量加入状态
//题意:给出n个点用长方形来覆盖,每个点能被多个矩形覆盖,矩形的边是平行于轴线的每个矩阵至少覆盖2个点(包括边界上的点)//因为所有矩阵有个整体尺寸如何选择矩形让总体面积最小//要覆盖两个点的最小面积矩形是两个点都在对角线上//444K 125MS#include #include #include using namespace std;#define MA原创 2015-03-04 21:04:12 · 402 阅读 · 0 评论 -
DP两道hdoj关于序列的水题hdoj1087,1159
//求最长上升序列的累积和//思路:因为对比最长上升子序列发现对于这种需要保存的条件太多//考虑到需要保存一个当前序列的最大值,那么可以以最大值的索引对应的累计和//46MS 1632K #includeusing namespace std;#define MAX_N 1002static int n;static int a[MAX_N];static int dp[MA原创 2015-06-01 19:23:57 · 656 阅读 · 0 评论 -
poj1204字典树+dfs搜索
//Trie树的题目8个方向从顺时针开始计算A->G对应从北方开始顺时针只回来//思路:还是字符串查找问题 #include #include #include using namespace std;#define MAX_L 28#define MAX_N 1010struct wordPosition{ int row; int col; int dir;原创 2015-05-22 18:48:17 · 407 阅读 · 0 评论 -
hdoj5280最大区间和
//通过sum[0,j] - sum[0,i],i是前面的最小和#include using namespace std;#define MAX_N 1010typedef long long ll;ll num[MAX_N];int main(){ int T; int N,P; cin>>T; while(T--) { cin>>N>>P; for (in原创 2015-07-11 21:39:31 · 344 阅读 · 0 评论 -
poj1062昂贵的聘礼有等级限制的最短路径
//主要问题是在最短路径过程中注意等级的差距//第一次原创 2015-06-14 00:43:21 · 277 阅读 · 0 评论 -
leetcode42 Trapping Rain Water
通过双指针,头指针是当前第一个非递减的位置,尾指针是当前高度位置通过两个栈来维护数据..出栈的时候填充了水以后修改高度重新加入栈内算法思路:1若为空栈直接加入栈 2.若当前不为空栈讨论当前高度与栈顶高度的值 若小于等于栈顶高度直接加入栈 否则设当前位置为j,找到栈内从右到左第一个非递减的位置i将 i原创 2016-11-28 16:36:01 · 257 阅读 · 0 评论 -
leetCode的数独题目
leetCode36, 数独检测合法性就是看每一行每一列以及每个九宫格子是否有重复元素#include#include#include#include#include#includeusing namespace std;struct P{ int i; int j; bool operator<(const P&p2)const { return (i <原创 2016-11-08 00:16:20 · 403 阅读 · 0 评论 -
COM技术内幕读书笔记————动态链接和组件
1.什么是动态链接和组件? 首先组件并不是DLL。DLL是一种服务程序,是一种发行组件的方式。而组件就是DLL中所实现的接口集。DLL是一种形式,组件是实质。2.组件事怎么被创建的? 主要是将组件动态链接到客户中来,那么创建组件,这是临时性的创建方法。在用户获取组件接口之前,就需要先将DLL加载到进程空间,在此空间中创建组件。原创 2016-08-13 17:28:31 · 948 阅读 · 0 评论 -
leetcode----Regular Expression Matching
这是一道正则表达式匹配问题,当我们编写程序的时侯会发现一个重要问题就是*前面的字符需要匹配几个的问题,如果.*那么对应被匹配串需要划掉多少个呢?那么这种问题显然不能自己盲目的去划掉遍历所有情况,那么可以交给递归函数去解决,我们遍历我们遍历所有x*可能匹配的字符个数然后看有没有情况满足条件。那么这题很自然的就是分治的思维解决了。class Solution {public原创 2016-09-13 20:06:29 · 263 阅读 · 0 评论 -
#hiho1099 Constellations枚举法的应用
枚举的应用以及无法存储的大数组通过记录其中的关键点(次题就是#点)来进行遍历#pragma warning(disable:4996)#include#include#include#include#include#includeusing namespace std;#define REP(i,a,b) for(int i=a;i<b;++i)struct Pose{原创 2016-05-18 21:52:11 · 334 阅读 · 0 评论 -
hiho1087状态压缩dp
//记忆话搜索方法//此题状态压缩中套用记忆化搜索的方法//并用树状数组的方法遍历子集# include# include# include# include# includeusing namespace std;int n, m, dp[12][1 << 12], st[12], p[1 << 12];int DP(int u, int s){ if (dp[u][s])原创 2016-05-11 17:51:12 · 376 阅读 · 0 评论 -
POJ1068双端队列模拟
//题意:P代表当前右括号位置前面有多少个左括号//W代表右括号位置从与它匹配的位置到该位置有多少个右括号#include #include #include #include using namespace std;int n;int P[25];int W[25];int main(){ int T; scanf("%d",&T); while(T--) {原创 2015-10-25 21:54:54 · 375 阅读 · 0 评论 -
poj1797最大生成树
//1348K 454MS //注意不是生成整棵树而是只要可以到达N点就行了#include #include #include #include using namespace std;#define MAXE 1000005#define MAXN 1006static struct edge{ int from; int to; int cost;}原创 2015-09-18 20:31:11 · 422 阅读 · 0 评论 -
#1049 : 后序遍历分治算法
//题意:给出该树前序以及中序的结果//根据当前树的前序和中序为状态//求出后序遍历的结果#include #include #include using namespace std;#define MAXN 40char str1[MAXN];char str2[MAXN];char ret[MAXN];int root;int cnt;//因为中序与前序的长度是原创 2015-10-08 22:34:44 · 390 阅读 · 0 评论 -
UVA11992二维线段树区间修改
#include #include #include #include #include using namespace std;#define MAXN 100006#define inf 0x3f3f3f3fstruct CNode{ int L,R; long long nsum; int nmax; int nmin; long long Inc;//增原创 2015-11-04 23:28:48 · 434 阅读 · 1 评论 -
poj2817状态压缩DP
//输出最大的与前一个字符相同的个数之和//184K 0MS //主要要理解是状态压缩DP,状态是是否选择了该字符//并且保存状态时候因为字符之间有顺序,所有需要保存最后一个字符#include #include #include using namespace std;#define MAXN 12static int N;static char words[MAXN]原创 2015-09-26 10:10:13 · 348 阅读 · 0 评论 -
HDOJ1085母函数的应用
#include #include #include using namespace std;static const int lmax = 1000000;static int C1[lmax],C2[lmax];int main(){ int a1,a2,a5; int total; while(scanf("%d %d %d",&a1,&a2,&a5)) { i原创 2015-08-17 20:49:30 · 470 阅读 · 0 评论 -
poj1141根据不同规模构造最优子问题求解DP
//按照子问题的规模来枚举解决最优子问题,类似问题有算导上的最优矩阵乘法链//600K 32MS#include #include using namespace std;#define MAX_N 2500#define For(i,a,b) for(int i=a;i<=b;++i)#define INF 0x3f3f3f3fstatic int dp[MAX_N原创 2015-07-13 22:22:21 · 486 阅读 · 1 评论 -
Effective c++:引用计数
概念:允许多个等值对象共享同一个实值。目的:1).一旦某个对象new分配,记录对象拥有者很重要,并且负责有删除对象,但是执行过程中对象拥有权可能转移。引用计数可以消除对象拥有权负荷,建立出垃圾回收机制2).如果多个对象相同的值,那么还进行多次存储浪费内存。class String {原创 2015-04-07 21:29:04 · 321 阅读 · 0 评论 -
POJ2001Trie树的运用
//字符串的前缀处理问题:Trie树的运用//同时前缀标出让其没有歧义:思路就是从子串中在Trie树中找到能够唯一标示的第一个字符为止//Accepted 276K 16MS#include #include #include using namespace std;typedef struct node{ int L;//以当前开头的词的数目 char value; n原创 2015-05-01 21:22:43 · 338 阅读 · 0 评论 -
智能指针:Effective c++总结
1.概念所谓smart pointers 就是看起来用起来想内建指针,提供更多机能 包括各种用途,资源管理以及自动重复写码工作当你用smart pointers取代C++内建指针的时候,你会获得以下各种指针行为控制权:构造和析构:当指向该对象的最后一个smart pointers被销毁的时候,会删除对象。复制和赋值:当一个smart pointer被原创 2015-03-27 21:31:17 · 344 阅读 · 0 评论 -
POJ2739尺取法的应用
//题意:给出一个整数,这个整数能否表示成n个prime数的和//输出表示的方法数目//思路:连续以及单点想到用取尺法//152K 16MS#include using namespace std;#define MAX_N 10005static int prime[MAX_N];//第i个素数static bool is_prime[MAX_N+1];原创 2014-12-29 14:27:02 · 312 阅读 · 0 评论 -
poj3468线段树维护多个数据
#include using namespace std;#define MAX_N 100005#define MAX_Q 100005typedef long long ll;const int DAT_SIZE = (1<<18) - 1;//输入static int N,Q;static int A[MAX_N];//char T[MAX_Q];//sta原创 2014-12-27 14:56:29 · 500 阅读 · 0 评论 -
初始化Direct3D的基本概念
1.1Direct3D概述Direct3D是一套底层图形API原创 2014-11-23 21:31:35 · 663 阅读 · 0 评论 -
poj2456二分搜索最大化最小值
//题意:N间牛舌小屋在一条直线上但是他的M头牛对小屋不满意经常互相攻击。//因此决定吧每头牛放在距离其他牛尽可能远的牛舍//思路:就是最大化最近的两头牛之间的距离//用贪心算法将第i头牛放在xj的话那么第I+1投牛满足xJ+d//对于X头牛金星排序最多进行一次处理//524K 94MS原创 2014-10-20 16:48:49 · 422 阅读 · 0 评论 -
poj3279开关问题
188K485MS原创 2014-11-23 15:18:39 · 488 阅读 · 0 评论 -
使用缓存区对象存取像素矩形数据
在缓存区中存储像素数据可以提高应用程序的性能,我们可以消除在渲染每一帧的时候都把数据从客户机的内存传输到原创 2014-10-31 13:08:39 · 493 阅读 · 0 评论 -
动态内存管理
首先应该明白对象的三种内部的存储方式:自动存储,静态存储,和动态存储原创 2014-10-31 12:02:46 · 367 阅读 · 0 评论 -
POJ1543运用STL
//找出完全平方数//这题是暴力算法原创 2014-11-16 17:17:09 · 255 阅读 · 0 评论