
算法
浅笑~.~
都会好起来的
展开
-
最长递减子序列
/* 最长递减子序列 如果Array[i]>aArray[j] 第i个数的最长递减子序列的长度 等于 i+1到最后一个数的最长递减子序列的长度 加 1 否则 最长递减子序列的长度就是1; 最后一个数的最长递减子序列的长度等于1,最开始的时候dp[i]的值都为1; 然后倒着求最长递减子序列 如 3,8,7,5,4,6,3,9 dp[0]=1,dp[1]原创 2016-10-21 22:25:27 · 975 阅读 · 0 评论 -
台阶走法
/* 问题:一个楼梯有35级,每次走1级或2级或3级,请问从底走到顶一共有多少种走法? 思想:到达最后一阶可以由最后一阶的前三阶走三步上去,或者由最后一阶的前两阶走两步上去,也可以由最后一阶走一步上去 第一阶有一种走法(一步) 第二阶有两种走法(连着走两个一步和直接一步走两个台阶) 第三种走法(由前两个台阶的走法再走一步和直接一步走三个台阶) 第i阶走法=第i-原创 2016-10-22 14:22:13 · 1024 阅读 · 0 评论 -
0-1背包
/*0-1背包问题 如果背包容量j大于第i个物品的体积 那么前i个物品在容量为j的最大价值为 第i个物品的价值加上前面i-1个物品在容量为j-第i个位置上的体积 或者前面i-1个物品的最大值 dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i].weight]+a[i].value) 如果背包容量j小于第i个物品的体积 那么前i个物品在容量为j的最大价值为原创 2016-10-17 21:59:09 · 216 阅读 · 0 评论 -
最大字段和问题
/*最大字段和问题 以第i位数字结尾的最大字段和等于前一个字段和加上本身的值或者等于本身; 动态转移方程为:dp[i]=max(dp[i-1]+a[i],a[i]); 如 8,34,-67,98,3,5,-7,43 dp[0]=8; 因为dp[0]大于0,所以dp[1]=dp[0]+a[1]; 因为dp[1]大于0,所以dp[2]=dp[1]+a[2]; 因为dp[2]小于0,所原创 2016-10-17 20:55:46 · 925 阅读 · 0 评论 -
插入排序
/* 插入排序 i从第二个数开始,并与其前面的数字进行比较,找到第一个比其大的数,并记录其位置t; 然后把位置t到位置i-1的数后移一位,然后将原本第i位置上的数放在第t位置上 如 4 9 43 3 5 44 94 8 先9与4比较 9>4是有序的,不需要做任何操作; 43依次与4,9比较 43>4,43>9是有序的,不需要做任何操作; 3与4比较原创 2016-10-14 22:39:04 · 206 阅读 · 0 评论 -
全排列
全排列 要对一个n个数进行全排列,可以分解为n个子问题,然后分别固定这n个数对每个子问题又分子问题,直到不能分解为止,例如:12345 子问题为 1 2345 12 345 13 245 14 235 15 234 123 45 123 54 1234 5 2原创 2016-09-27 20:32:31 · 237 阅读 · 0 评论 -
归并排序
/* 归并排序:用分治法,对要排序的数组一分为二,对每个子数组依然一分为二,直到数组中只有一个元素为止;然后将相邻两个数组进行合并 如: 3,98,43,9,36,45,2,7 拆分:要排序的数组一分为二,对每个子数组依然一分为二,直到数组中只有一个元素,数组就是有序的 第一次拆分:3,98,43,9 36,45,2,7 第二次拆分:3,98 4原创 2016-10-16 12:36:33 · 191 阅读 · 0 评论 -
最长公共子序列
/* 最长公共子序列 3,8,7,6,5,2 4,8,3,6,5,1 c[i][j] 表示第一个数组的第i个位置和第二个数组的第j个位置的第j个位置的最长公共子序列的长度 如果第一个数组第i个位置的值和第二个数组第j个位置的值相同那么最长公共子序列的值等于 第一个数组第i-1个位置的值和第二个数组第j-1个位置最长公共子序列的值加一(c[i][j]=c[i-1][j-1]+1)原创 2016-10-22 15:07:30 · 225 阅读 · 0 评论 -
N背包问题
/* n背包 i个物品在体积为j的背包中最大的价值为max(第i个物品装0个,装1个……装j/i.weight) w 3 2 5 v 8 5 12 背包容量为5 0 1 2 3 4 5 3 0 0 0 8 8 8 2 0 0 5 8 10 13 5 0 0 0 8 10 13 */原创 2016-10-22 16:45:35 · 797 阅读 · 0 评论