上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 31 下一页
摘要: 总结1. Objects in a set are immutable; if you want to modify an object, you need to:a. make a copy of the object from the setb. modify the copyc. remove the original object from the object, andd. insert the copy into the set2. Each associative container is parameterized on Key and an ordering relation 阅读全文
posted @ 2014-03-10 16:37 SangS 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可思路1. 朴素背包问题2. 假设 dp[i][j] 表示前 i 件物品拼成 j 分的最少邮票数dp[i][j] = min(dp[i-1][j], dp[i-1][j-value[i]]+1)3. 转化成一维背包 dp[v] = min(dp[v], dp[v-value[i]]+1)代码 未通过九度测试#include #include #include using namespace std;const int INF .. 阅读全文
posted @ 2014-03-10 15:26 SangS 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 目的:将中缀表达式(即标准形式的表达式)转换为后缀式。例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+转换原则1. 遇到操作数, 直接输出2. 操作符的优先级为 () 最大, * / 次之, +- 最小. 遇到操作符后, 假如操作符堆栈为空, 则直接压入操作符, 否则判断当前操作符与栈顶操作符的优先关系, 假如栈顶操作符的优先级大于 等于当前操作符的优先级, 那么弹出栈顶操作符, 持续弹出, 直到栈顶操作符优先级小于当前操作符优先级或栈为空. 最后将当前操作符入栈3. 如果遇到右括号, 那么将栈顶操作符弹出, 持续弹出直到遇到左括号, 左括号弹出但不输出4. 表达式读入完毕 阅读全文
posted @ 2014-03-10 14:47 SangS 阅读(4808) 评论(1) 推荐(0) 编辑
摘要: 题目描述:计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻。现在活动的组织者想知道,共有多少种可选的座位方案。例如当n为4时,共有女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男7种。思路1. 读完题, 感觉这是道 DP 题2. 前几天做了一道统计括号数的题目, 和此题比较类似3. dp[i][j] 表示前 i 个人中有 j 个女生的方案数, 那么状态转移方程就能写为 dp[i][j] = dp[i-1][j] (最后一位. 阅读全文
posted @ 2014-03-09 21:21 SangS 阅读(491) 评论(0) 推荐(0) 编辑
摘要: 题目描述:有如下图半价为R的圆形蛋糕,被切一刀后(图中红色直线),分成两个部分(黄色和绿色),已知其比例为r,求刀痕长度(图中红色直线)。思路1. 画个图比划比划, 可以看出是道数学题2. 将刀痕的长度设成 l, 就能建立等式, 接下来就是求 l 了3. 写成等式后需要以编程的角度出发求解未知数 l, 很自然就能联想到二分法搜索, 但是需要从数学的角度去证明 L 在区间 (0, R) 是单调的4. 再看图, 发现不需要求导数证明单调, L 越大黄色部分越大, L 越小黄色部分越小, 单调性是 straight forward5. 对 double 进行二分搜索还是第一次做, 二分后对 low, 阅读全文
posted @ 2014-03-09 21:16 SangS 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 题目描述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。思路1. 想了半天, 写不出递归函数, 倒是基于堆栈的循环方法简单的多代码#include #include #include #include #include using namespace std;class Node {public: char data; Node *left, *right; Node(char... 阅读全文
posted @ 2014-03-07 21:10 SangS 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 题目描述: 二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值; 2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值; 3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉排序树中,每次插入后成功后,求相应的父亲节点的关键字值,如果没有父亲节点,则输出-1。思路1. 根据数组构建二叉搜索树代码#include #include using namespace std;class Node {public: . 阅读全文
posted @ 2014-03-07 20:07 SangS 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 题目描述:在组合数学中,我们学过排列数。从n个不同元素中取出m(m#include using namespace std;int five[20];void init() { int tmp = 2, i = 0; while(tmp = five[i]; i ++) { cnt += x/five[i]; } return cnt;}int main() { int n, m; init(); while(scanf("%d%d", &n, &m) != EOF && n != 0) { int cnt = 0; ... 阅读全文
posted @ 2014-03-07 20:05 SangS 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。思路1. 题目考察的是 GCD代码#include #include #include using namespace std;int numbers[700];int gcd(int x, int y) { if(x == 1 || y == 1) return 1; if(x == y) return x; if(x < y) swap(x, y); if(x&1 == 1) { if(y&1 == 1) ... 阅读全文
posted @ 2014-03-07 20:04 SangS 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 题目描述:Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as:hde ll rlowoThat is, the characters must be printed in the original order, starting top-down from the left vertical line with n1 characters, 阅读全文
posted @ 2014-03-07 19:58 SangS 阅读(367) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 31 下一页