
ACM经典问题及练习
fofu33
个人微信:qinoem,来交个朋友吧
展开
-
动态规划 dynamic programming 学习笔记
动态规划是有经典的01书包问题引入具有“最优子结构”、“子问题重叠”、“边界”和“子问题独立”,当你发现你正在思考的问题具备这四个性质, 通俗的说就是, 你要求解一个问题, 而加入你知道这个问题的子问题的话, 那么你就可以知道你的问题答案,而这个子问题又跟这个问题相思的求法。 想要更多的了解动态规划,下面是一个例子有一个国家,所有的国民都非常老实憨厚,某天他们在自己原创 2012-11-23 20:24:32 · 957 阅读 · 0 评论 -
各种排序算法
#include #include #include #define SIZE 18 //数组大小void print(int *p);//随机生成数据,初始化数组void init(int *p){ if(NULL == p) return; srand(time(0)); for(int i = 0; i < SIZE; i++){ p[i] = rand()原创 2013-08-07 19:53:27 · 640 阅读 · 0 评论 -
单源最短路径
input 第一行两个数n, m分别为节点个数,路径的数目。接下来m行为路径。测试例以n == 0和m == 0结束4 41 2 12 3 23 4 34 2 45 71 2 101 4 251 5 802 3 403 5 104 3 204 5 500 0output: 输出源点到所有其他各顶点的最短路径长度。接下来是各个原创 2013-06-23 10:56:48 · 721 阅读 · 0 评论 -
求把一个序列分为两个两组,两组各自和相差最小的最大的那个和
输入:每组序列个数 序列 如 5 1 3 3 3 7 6 4 1 4 4 15 4输出: 9 16分析: 一开始因为每个数有可能分到第一组,也可能分到第二组。所以一开始想的是深度搜索。但是 显然时间会超出。后原创 2013-06-17 09:11:31 · 1634 阅读 · 0 评论 -
我的经验
1. 动态规划自顶向下的话不需要返回值, 递归实现。 自底向上可用for循环实现2. max, min函数定义在algorithm头文件中,但是Win32头文件windef.h中叶定义了这个, 所以在VC++中用max函数引入algorithm头文件,还是会说没有定义。可以换成_MAX和_MIN。但是注意提交的时候记得改回max和min, 不然又会说没有定义,zoj中会编译错误.原创 2013-05-11 12:02:05 · 669 阅读 · 0 评论 -
求一个序列中最小的自左到右最小的分组数
sample input84 3 8 5 9 6 7 8710 2 9 3 4 5 10output23ps: 因为在同样的个数里分组也有好多办法,所以这里的每个分组内部不一定含有最长不降子序列,但是个数是最少的。#include using namespace std;int a[50], b[50];int main(){ //freopen("i原创 2013-06-07 08:49:08 · 707 阅读 · 0 评论 -
最大字段和
输入5-2 -1 -3 -9 -54-2 6 -3 7输出-110程序: #include using namespace std;int main(){ //freopen("in2.txt","r",stdin); int n, i, a[100], sum = 0, max = -0xffffff; cin>>n; for(i = 0原创 2013-06-05 13:10:30 · 785 阅读 · 0 评论 -
codeblocks各种编译错误积累
1. 警告: anonymous type with no linkage used to declare variable ‘ a [1001]’ with linkage [默认启用]|我的代码:struct{ int class_num, assess;}a[size];似乎它不允许没有命名的结构体, 于是在struct后加了个结构体名node, 这样编译通过。原创 2013-06-13 20:41:50 · 12369 阅读 · 3 评论 -
POJ题目分类
转自http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295)转载 2013-05-11 11:06:29 · 601 阅读 · 0 评论 -
最大匹配字符子串 深度优先
深度优先, 可以得出最大匹配数目, 但是无法输出最大匹配字符子串。#include "iostream" #include "cstring" using namespace std; #define len 1024 char a[len]; char b[len]; int max, length_a, length_b; void pull(i原创 2013-04-17 09:15:30 · 975 阅读 · 0 评论 -
杨辉三角(帕斯卡帕斯卡)
几个不熟的性质:1. 第n行的m个数可表示为C(n-1,m-1),表示从n-1中选择m-1个位置的情况数。C(n,m)=n!/[m!(n-m)!]2. 第n行的第m个数和第n-m+1个数相等,即C(n-1,m-1)=C(n-1,n-m)。3. C(n,m)=C(n-1,m-1)+C(n-1,m) 这个公式一方面我们可以从杨辉三角的每个数等于它上方两数之和性质得到。4、第n行原创 2013-05-21 21:48:48 · 1682 阅读 · 0 评论 -
最大相容活动子集合 贪心法
主要学习sort的用法和贪心法测试例:111 43 55 70 63 85 98 116 108 122 1312 14#include #include //sort函数的头文件using namespace std;struct action{ int s; //起始时间 int f; //终止时间 i原创 2013-05-18 09:32:27 · 2786 阅读 · 0 评论 -
黑书上的DP 30题
pagesectionnotitlesubmit1131.5.1例题1括号序列POJ11411161.5.1例题2棋盘分割POJ11911171.5.1例题3决斗Sicily18221171.5.1转载 2013-05-04 16:11:05 · 1241 阅读 · 0 评论 -
getline的使用方法
#include "iostream"#include "vector"#include "string"#include "stack"using namespace std;#define buffer 1014;int main(){int n = 3, i = 0;string str;getl转载 2012-11-28 20:11:20 · 931 阅读 · 0 评论 -
棋盘覆盖问题 (分治法)
棋盘覆盖问题问题的描述:¢在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格,且称该棋盘为特殊棋盘(Defective Chessboard)。l特殊方格在棋盘中出现的位置有 4k种情形,就有4k种不同的棋盘。¢图中的特殊棋盘是当k=2时16个特殊棋盘中一个。在棋盘覆盖问题中,要求用图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以原创 2013-04-25 21:59:25 · 3099 阅读 · 0 评论 -
最长不降子序列 LIS(Longest Increasing Subsequence) 动态规划与深度搜索
看清楚题意, 再做题。 我发现我总是给自己出题, 把题目的意思看成另一个, 哎, 结果又来一套说法.这是我做poj 1836 Alignment, 繁衍出的. 注意:以下跟poj 1836题意不一。最长不降子序列例题: 下面给出三组数,第一行一个队列是人数, 然后队伍各自的身高, 问从中抽出多少个人可以让剩下的人员从左至右是低到高。input:51 1 1 1 17原创 2013-04-05 11:20:40 · 1297 阅读 · 0 评论 -
ZOJ 遇到的问题
1. error: reference to 'max' is ambiguousambiguous是含糊的意思。系统内部有个max变量, 重名了。 换成另外一个变量名. 2. In function 'int main()': p.cc:46: error: overloaded function with no contextual type informat这个又是同原创 2012-11-22 19:53:04 · 7776 阅读 · 0 评论