算法题
xiaoju233
Talk is cheap, show me the code.
展开
-
POJ 1018 【动态规划】
POJ 1018 【动态规划】【POJ 1018】题意:有n种设备,每种设备由不同厂家生产的带宽和价格不同。要求每一种设备从其中一个厂家中采购,要求n台设备中的最小带宽B和总价格P的比值B/P最大。解法:原问题比较难入手,考虑将问题转化为求前i台设备中带宽为j的最小总价格。设前i台设备中带宽为j的最小价格和为dp[i][j],k为i-1台设备中的最小带宽,则有当j<=k时,dp[i...原创 2019-09-04 16:50:59 · 517 阅读 · 0 评论 -
POJ 1679 次小生成树
POJ 2377 【次小生成树】题目链接:POJ 2377题意:给出一个图,问其中的最小生成树是否唯一题解:即比较最小生成树和次小生成树的值是否相同。那么如何求次小生成树呢?次小生成树一定是原最小生成树某一条边被禁用后求得的思路:先跑一边最小生成树,然后分别测试禁用最小生成树中某一条边,重新求最小生成树,求得的最小结果即为次小生成树。代码如下:#include <iostre...原创 2019-09-04 17:06:19 · 186 阅读 · 0 评论 -
乘积最大子数组 【动态规划】
乘积最大子数组 【动态规划】题目链接题意:给出一个数组,要求一个子数组,使得子数组中所有元素乘积最大。思路:最大值乘以一个负数之后可能变为最小值 最小值乘以一个负数之后可能成为最大值用maxx[i]记录以第i个元素结尾的子数组乘积最大值用minn[i]记录以第i个元素结尾的子数组乘积最小值于是有:maxx[i]=max{maxx[i-1]*num[i],minn[i-1]*nu...原创 2019-09-05 13:12:35 · 1981 阅读 · 0 评论 -
最大和子数组 【动态规划】
最大和子数组 【动态规划】题目来源题意:给出一个数组,要求一个子数组,使得子数组中所有元素之和最大,输出最大值以及子数组的首尾元素。思路:设d[i]为以第i个元素结尾即num[i]元素结尾的子数组元素最大和 d[i]=max{d[i-1]+num[i],num[i]} 设p[i]为以第i个元素结尾的子数组的首元素的下标 当d[i]=d[i-1]+num[i]时,...原创 2019-09-05 13:22:38 · 137 阅读 · 0 评论 -
柱状图中最大的矩形
柱状图中最大矩形题目来源题意:给出一个柱状图,求这个柱状图上可画出的最大矩形的面积思路一:求出每个柱左右两边的第一个比它低的柱的下标 设第i个柱左边第一个比它低的柱的下标为left[i] 设第i个柱右边第一个比它低的柱的下标为right[i] 则第i个柱向两边扩展的最大矩阵的面积为s[i]=(right[i]-left[i])*height[i];时间复杂度...原创 2019-09-06 14:12:33 · 152 阅读 · 0 评论 -
最长上升子序列 【二分查找】
最长上升子序列 【二分查找】题意:给定一个无序的整数数组,找到其中最长的上升子序列的长度。思路一:动态规划:dp[i]=max{dp[k]+1} (num[i]>num[k],0<=k<i) 时间复杂度为O(n*n)思路二:动态规划+二分搜索 用dp数组存放当前最长上升子序列,使用二分搜索查询下一个元素在当前最长上升子序列中的位置,并更新该位置的元素值,若下...原创 2019-09-07 12:14:22 · 449 阅读 · 0 评论