彻底理解01背包问题
摘要:本人不才,虽然学过运筹学,但早已忘了个干净,最近在看面试题,发现DP问题非常普遍,而我总喜欢用递归搜索的思维方式去解决DP问题,做了几道题才发现自己根本没有理解DP,也没有使用DP。所以在看到01背包问题的解的时候百思不得其解。相信不少人跟我一样也会对01问题的递推公式不理解,下面就通过一道程序的打印结果来分析一下到底DP在程序中是如何运作的。设总的背包大小是V,申请一个大小是V的数组f[V]来存储中间结果。下面要开始发挥想象力了:想象一下,现在你有V个从1到V容量连续变化的V个背包(而不是只有一个背包),第一步迭代: 不论目前手边有多少个物件,首先拿起第一个物件1,在手里掂量掂量,看起来可.
阅读全文
posted @
2012-09-30 20:39
暗夜的雪
阅读(3972)
推荐(0)
LIS(Longest Increasing Subsequence)问题的解
摘要:问题:给出一个整数序列,求出最大递增序列(注意此处“序列”可以不连续排列,而“串”则必须连续排列)思路:典型的动态规划问题,从头到尾遍历序列,当前遍历位置的最长递增序列是此处的上一处比当前遍历位置值小的那个数的最长递增序列加上当前遍历位置的值为后缀组成的序列(符号记忆能力不好真是伤不起,描述的时候一个变量都不想用)。#include <stdio.h> int LIS(int a[10],int k,int r[10],int* pos){ int prelow=0; if(k==0) { r[--*pos]=a[0]; return 1; ...
阅读全文
posted @
2012-09-29 16:44
暗夜的雪
阅读(829)
推荐(0)
四色定理涂色的解
摘要:题目:运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。#include <stdio.h> static int curcolor=0;int pickaunic(int map[6][6],int color[6],int i){ for (int j=0;j<6;j++) { if (map[i][j]==1 && (curcolor%4) == color[j]) //如果区域i和区域j相邻并且
阅读全文
posted @
2012-09-27 22:42
暗夜的雪
阅读(851)
推荐(0)
人搜一道笔试题的解
摘要:题目:有N个节点,每两个节点相邻,每个节点只与2个节点相邻,因此,N个顶点有N-1条边。每一条边上都有权值wi,定义节点i到节点i+1的边为wi。求:不相邻的权值和最大的边的集合。思路:典型的分治算法,使用递归方式来逐步缩小问题范围,最终找到返回条件:如果当前位置没有下一个相隔位置(为倒数第1个或倒数第2个位置),那么就返回当前位置的值。如果存在下一个相隔位置,那么缩小问题规模,把当前位置的值和合法位置的值逐个相加,在合法位置集合中找到和当前位置值相加后最大的值返回。代码:#include <stdio.h>int perm(int list[], int k, int m) {
阅读全文
posted @
2012-09-27 14:15
暗夜的雪
阅读(534)
推荐(0)
从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
摘要:这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport)来导出dll和lib文件。终于弄明白了export和import的作用,下面从使用的角度来说明一下他们的功能。 首先要知道,头文件是C++的接口文件,不仅本工程需要使用头文件来进行编译,给其他工程提供dll的时候也要提供此dll的头文件才能让其他人通过编程的方式来使用dll。记住:头文件要给自己用还要给别人用。 比如一个项目中的Class中含有一个静态变量,生成dll的时候只采用了__declspec(dllexport) 如下:dll工程A1.h:...
阅读全文
posted @
2012-09-25 13:03
暗夜的雪
阅读(4775)
推荐(0)