2016SDAU课程练习三
文章平均质量分 52
WiseDoge
未来的IT民工
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
练习三 1011
概述:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。思路:典型的斐波拉契数列问题,相距N步与相距N-1步和相距N-2步有关,f(n)=f(n-1)+f(n-2),没啥好说的。感想:这是我在本套题遇第三次这类问题。#include using namespace std;long long dp[60];int main(){原创 2016-05-03 16:27:21 · 418 阅读 · 0 评论 -
练习三 1006
概述:数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?思路:做这个题,有两种思路,一是自上而下(也是大多数人的做法),二是从下向上反推。因为塔顶只有一个元素,显然从下向上递归比较方便,因为都会递归到一个元素上。感想:要从多种解题方法中“寻找最优解”。#include#include#include#includeusing namespa原创 2016-04-28 22:18:05 · 532 阅读 · 0 评论 -
练习三 1002
概述:给出两个字符串,求出它们最长的公共部分的长度。思路:这个题用到了LCS(最大公共序列)算法,老师没有讲过,于是我查了一下,思路是这样的,将两个序列分别比作矩阵的行和列,如下图矩阵初始都置为0,一旦一个格的行和列相等,就把对应格的值变为左上对角线格的值+1,否则,就取他左或上一格的大者,此题就是用了此种解法感想:上课没讲的东西,不代表不重要。#include #inclu原创 2016-05-07 16:54:36 · 611 阅读 · 0 评论 -
练习三 1019
概述:给出每个物体的价值和物体的数量,如何分使得A,B所得价值最接近并且A的价值不能小于B思路:将价值的总和平分,就可以转化为01背包问题,状态方程为 dp[j] = max(dp[j],dp[j-val[i]]+val[i]);感想:无。#include #include #include using namespace std;int val[6005];int原创 2016-05-07 17:02:28 · 377 阅读 · 0 评论 -
练习三 1017
概述:给出一组产品的价值和体积以及包的容量,求包能装的产品的最大价值。思路:与1019题类同,同为01背包问题。状态方程为 dp[j] = max(dp[j], dp[j - w[i]] + v[i]);感想:这套题里有好多01背包啊。#include #include #include using namespace std;const int MAX = 1005原创 2016-05-07 17:08:36 · 403 阅读 · 0 评论 -
练习三 1003
概述:求最长升序子列。思路:这个题还用想吗- =,出题人一点也没拐弯抹角,直接就告诉你求最长升序子列。如果 f(n)>f(n-1),则 在n除的最长升序子列等于在n-1的加一,按照这种方法循环下去即可。感想: 无。#include #include #include using namespace std;const int maxn=1002;int num[maxn原创 2016-05-07 17:16:23 · 490 阅读 · 0 评论 -
练习三 1022
概述:小偷偷东西,给出他被抓的几率,求他能偷到的最大财富。思路:既然是最大财富,那就是当他正好被抓到时,钱最多,在将被抓概率转化为存活概率,利用概率相乘原理,转化为01背包问题(怎么又是01背包)即可。感想:无。#include #include using namespace std;struct Bank{ int mom; double p;} Bank[1000原创 2016-05-07 17:53:47 · 613 阅读 · 0 评论 -
练习3——动态规划总结
动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解 题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。 动态规划问题运算量比较大,通原创 2016-05-18 22:40:36 · 619 阅读 · 0 评论 -
练习三 1021
概述:有六种物品,每种物品对应的价值为1~6,给定每种物品的个数,切不可分割,问能否把这堆物品分为等价值的两份。思路:多重背包,计算过程比较复杂,所以要优化一下,先把总价值为奇数的组排除掉(因为奇数不可能分为等价值的两份),然后再套模板计算即可。感想:无。#include #include using namespace std;int map[7];int dp[10原创 2016-05-22 10:54:17 · 385 阅读 · 0 评论 -
练习三 1010
概述:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?思路:对于两层楼梯,你可以选择一步跨上,也可以选择分两步跨上去,一共这两种方法,所以对于N层台阶,就有f(n)=f(n-1)+f(n-2).感想:无。#include using namespace std;int main(){ long long dp[45];原创 2016-04-28 22:21:45 · 461 阅读 · 0 评论 -
练习三 1012
概述:在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数。思路:此题做法与1012完全相同,详情见1012。感想:有些题其实是相通的。#includeusing namespace std;long long dp[50];int main(){ //ifstream cin("aaa.txt"); int n; dp[1] = 1;原创 2016-04-28 22:24:25 · 327 阅读 · 0 评论 -
练习三 1013
概述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?思路:这道题是去年某一次的C++作业,当时没有系统的学习动态规划,也不懂什么递归,做了很久,至今记忆犹新啊。感想:无。#includeusing namespace std;long long dp[50];int main(){ //ifs原创 2016-04-28 22:27:17 · 356 阅读 · 0 评论 -
练习三 1024
概述:首先给出物品数量和手中资金,人后每样物品给出价格,需要购买时手中至少需要多少资金,还有物品本身的价值,要求求出最大资金。思路:一定要按q-p排序,不要按价值排序。感想:无。#include #include using namespace std; //crucial#define N 500#define M 5000struct Item{ int pi;原创 2016-05-03 16:32:50 · 328 阅读 · 0 评论 -
练习三 1004
概述:有一个数列,它的成员都是2,3,5,7的倍数,输入一个n,求出这个数列的第n个数。思路:先列一个表,把这些数据全求出来,利用循环,设a,b,c,d=1,分别对他们*2,*3,*5,*7,取最小值入表,并将其+1,依次类推,最后输出所求值即可。感想:以前做过的题,拿来想想就有思路了。#include #include using namespace std;typedef原创 2016-05-03 16:23:58 · 574 阅读 · 0 评论 -
练习三 1005
概述:给定一块砖的 长宽高,让你叠金字塔,下面砖的表面积必须大于上面的,求能叠到的最高高度。思路:先将给定的所有的砖分成三种,这样的话,一块砖就有三种形态,然后将所有的排序,然后挑选,最后将所选的高加到一起即可。感想:题意不太好理解。 #include #include #include #include #include原创 2016-05-03 16:18:20 · 530 阅读 · 0 评论 -
练习三 1001
概述:求最大字段和,d[i]表示已 i 结尾(字段和中包含 i )在 a[1..i] 上的最大和。思路:利用递推公式d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];max = {d[i],1感想:第一题。#include using namespace std; int get(int data[] , in原创 2016-05-03 16:13:40 · 417 阅读 · 0 评论 -
练习三 1023
概述:Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同原创 2016-04-28 22:45:24 · 573 阅读 · 0 评论 -
练习三 1016
概述:在一无限大的二维平面中,我们做如下假设:1、 每次只能移动一格;2、 不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);3、 走过的格子立即塌陷无法再走第二次;求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。思路:f[n]表示走n步的方案数,x[n]表示向下走的方案数,z[n]表示向原创 2016-04-28 22:42:23 · 633 阅读 · 0 评论 -
练习三 1015
概述:给出一个十进制整数,求二进制形式。思路:水水水水水水水水水水水水题。感想:水水水水水水水水水水水水#include#includeusing namespace std;int main(){ int n; vectorv; while (cin >> n&&n) { v.clear(); while (n) { v.push_back(n %原创 2016-04-28 22:36:53 · 410 阅读 · 0 评论 -
练习三 1014
概述:n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,求N条线可以将平面分成几部分。思路:做题的时候没有图,所以做起来一点思路也没有,只能上网Copy一个图了,顺便看了一下别人的思路。从图中可以看出,每增加一个节点,就增加4(n-1)+1个面,可得出递推公式f(n)=f(n-1)+4*(n-1)+1,根据数列的关系,可以递推出o(1)的公式。原创 2016-04-28 22:35:04 · 408 阅读 · 0 评论 -
练习三 1018
概述:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量,要求出重量最少能装满钱罐时的最大价值。思路:完全背包问题,感想:无。#include #include #include #include #include using namespace std;const int MAX = 600;int value[MAX];原创 2016-05-22 11:08:41 · 413 阅读 · 0 评论
分享