HDU 1394 Minimum Inversion Number (数据结构-线段树)
题目大意:
求逆序数。也就是给你一个序列,每次求逆序数,然再把第一个数放到这个序列的末尾,构成新的序列。问你这n个序列的最小的逆序数。
解题思路:
1、对于每个序列,其原来的逆序数记为 pre , 如果当前把该序列 第一个数 a[0] 移动到尾部,那么新序列的逆序数为 pre-a[i]+(n-a[i]-1)
因为序列中比a[i]大的数有 n-a[i]-1 个,比a[i]小的有 a[i]个。
因此只需求出...
分类:
其他好文 时间:
2014-05-12 07:07:01
阅读次数:
301
HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)
题目大意:
给定你一些矩形左下右上角坐标点,或者左上右下坐标点,求这些矩形的面积并。
解题思路:
利用线段树扫描线的知识,此题不需要离散化。...
分类:
其他好文 时间:
2014-05-12 06:43:25
阅读次数:
442
题目链接:10253 - Series-Parallel Networks
白书的例题。
这题也是需要把问题进行转化,一个并联可以分为几个串联,然后串联可以分成边。
如此一来,最后叶子结点种数会是n,问题转化为去分配叶子结点,使得总和为n。
书上有两种方法,一种直接去递归,利用组合数学的方式去计算答案。
一种是推出递推式:
设dp[i][j]为一共j个叶子结点的树,子树的叶子最多的为i...
分类:
Web程序 时间:
2014-05-12 06:22:04
阅读次数:
447
堆是完全二叉树,一个大小为n的堆为一棵包含n个节点的完全二叉树。完全二叉树的根称为堆顶。当堆中每个节点的关键字值大于等于其双亲节点的关键字值,这样的堆称为最小堆,当子节点的值都小于等于其父节点时,称为最大堆。...
分类:
其他好文 时间:
2014-05-11 13:58:15
阅读次数:
202
题目链接:1362 - Exploring Pyramids
白书上的例题,思路是对于每个结点,往后遍历分为左右两边子树来考虑,左边的子树为去掉根节点剩下的子树,而右边是要算上根节点的,这样就不会有重复的情况出现,然后根据乘法原理,左右两边情况相乘为总情况数,然后计算这些总和。
f[i][j]表示[i,j]结点的情况种数,那么 f[i][j] = sum{f[i + 1][k - 1] * ...
分类:
其他好文 时间:
2014-05-11 07:02:11
阅读次数:
277
#include
#include
int main()
{
int n,m,left,right;
int count;
int deep_n,deep_m,deep_diff;
int i, j;
for( scanf("%d%d",&m,&n); n!=0 && m!=0; scanf("%d%d",...
分类:
其他好文 时间:
2014-05-11 06:38:40
阅读次数:
395
题目链接:
http://poj.org/problem?id=1635
题目意思:
判断两棵树是否为同构的。0...
分类:
其他好文 时间:
2014-05-11 05:37:16
阅读次数:
338
通过二叉树的中序和后序遍历序列构造二叉树的非递归实现方法...
分类:
其他好文 时间:
2014-05-11 04:42:17
阅读次数:
305
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
Maximum Depth of Binary Tree
Total Accepted: 16605 Total
Submissions: 38287
Given a binary tree, find its maximum depth.
...
分类:
其他好文 时间:
2014-05-11 01:58:31
阅读次数:
441
#include#includetypedef struct node { int data;
struct node *lchild,*rchild;};node * create()//先序建立二叉树,根左右{ int x=0; node *t;
printf(" input data:"); ...
分类:
其他好文 时间:
2014-05-11 01:19:08
阅读次数:
311