
ACM
setidfine
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ_1221“单调递增”回文-----动态规划
直奔主题:设f(n,m)表示 n 经分解后最大子项不超过 m 的非递减序列的种数,则有: f(n,m) = f(n-m,m) + f(n,m-1)两种情况: 1、至少存在一个最大子项为 m,然后分解 n-m 2、最大子项为 m-1那么 ans(N) = f((N-k)/2, k) k=N,N-2,N-4...0(k表示中心的那个数,且为中轴线)如果 N 为偶数,则要加上一种情况:中轴线不过任何数字 ans[N] += f(N/2, N/2); #include usi原创 2011-03-19 23:12:00 · 526 阅读 · 0 评论 -
POJ_2479 最大连续子序列和
题目的意思很简单,看图就能懂:把一数组分为两部分,使得两部分的连续子序列和的和最大(有点绕口啊)对于最大连续子序列和,A[i]...A[j],肯定不会存在某一k值( iint currentMax = 0;int maxfor(int i=1; icurrentMax ? max:currentMax; if(currentMax如此只需要遍历一次数组即可得到最大的连续子序列和,复杂度为 O(N)而对于本题,则还需要一步,即如何分割数组使得两部分的最大连续子序列和的和最大:1、设end[i]表示原创 2011-03-18 13:27:00 · 1220 阅读 · 3 评论 -
POJ_2352线段树
因为输入的 Y 是非递减序列,所以只用考虑输入的 X 值,当输入时,该点的level即是在该点之前已经输入了多少个 x 坐标比当前小的星星数。所以我们要记录的是任何 x 坐标之前已经出现了多少个星星。对于动态区间问题,线段树是利器!#include using namespace std;typedef unsigned short unshort;const unshort MAX_N = 32000;unshort N;unshort ans[15005];struct Node原创 2011-03-23 01:37:00 · 456 阅读 · 0 评论 -
POJ_3468 线段树--区间的动态赋值和求和
如果每次赋值都遍历到叶子节点,则赋值的复杂度变为O(N),因此赋值时深入到需要赋值的那个区间就应当停止,记录当前的增量,如果下次搜索时,根据需要向下传递这个增量,这样的复杂度就降下来了#include using namespace std;const int MAX_N = 100000;int A[MAX_N+5];int N, Q;struct Node{ int left; int right; __int64 sum; __int64原创 2011-03-23 16:39:00 · 546 阅读 · 0 评论 -
POJ_2528 线段树+离散化
看了那么多代码和解说,什么也没有看懂,最后找到了这篇博文(http://www.cppblog.com/MiYu/archive/2010/10/15/129997.aspx),茅塞顿开啊!代码就不贴了,直接看那边博文原创 2011-03-27 13:25:00 · 431 阅读 · 0 评论 -
POJ_1011 DFS+剪枝
暂时只想到两处可以剪枝的地方。#include #include #include #include using namespace std;const int MAXN = 64;int stick[MAXN];bool flag[MAXN];int n;int sum;int len;int cnt;bool cmp(int a, int b){ return a > b;}bool dfs(int l, int start, int nu原创 2011-05-05 10:22:00 · 403 阅读 · 0 评论 -
最大二分图最大匹配的匈牙利算法
匈牙利算法基本思想:找到满足以下条件的路径起点和终点是未纳入已分配边的顶点,且两个顶点在不同的两个划分这条路径的奇数边是未纳入分配的边,而偶数边是已近被分配的边。根据1和二分图的性质,路径经过边的数目一定是奇数于是:未纳入匹配的边刚好比已经纳入匹配的边多一个。如果把这样的路径取反原创 2011-07-19 13:43:15 · 426 阅读 · 0 评论 -
各种输入问题
除非特殊说明,所有文章均为原创,转载请注明出处哦 o(∩_∩)o http://blog.youkuaiyun.com/setidfinec++读取字符istream & get(char &ch) // 从流中读取任意一个字符,包括空格 " " 和换行 "/n"int get(void) // 从流中读取任意一个字符,包括空格 "原创 2011-04-28 23:08:00 · 453 阅读 · 0 评论