动态规划
Sunrise0929
这个作者很懒,什么都没留下…
展开
-
编程之美2.14 求数组的子数组之和的最大值
3.求子数组的最大和 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。 #include #include原创 2013-08-21 18:22:25 · 411 阅读 · 0 评论 -
POJ1083 Moving Tables
题目要求时间最少,即尽可能让占用不同走廊的桌子并行运行。 设置一数组:dp[200],初始化为0。记录每个走廊占用的次数,所用时间极为最大占用次数*10 代码: #include #include #include #include using namespace std; struct node { int start; int end; }; bool cmp(原创 2013-08-13 10:58:12 · 511 阅读 · 0 评论 -
算导3(背包问题)
1. Knapsack Problem. There are 5 items that have a value and weight list below, the knapsack can contain at most 100 Lbs. Solve the problem both as fractional knapsack and 0/1 knapsack. 分数背包问题: #inclu原创 2013-08-13 10:57:10 · 1502 阅读 · 0 评论 -
POJ1088 滑雪
DP+dfs dp[i][j]:表示从坐标i,j为起始点的最长下降路径。搜索每一条路径取最值。 代码: #include #include #include #include using namespace std; int map[150][150]; int R, C; int dp[150][150]; int dfs(int i, int j) { if(dp[原创 2013-08-13 10:58:14 · 304 阅读 · 0 评论 -
POJ1050 To the Max
枚举+DP 枚举任意两行之间的矩阵,求出每列的和,转化为一维数组求最大子段和。 代码: #include #include #include #include using namespace std; int main() { int n; int p; int a[150][150]; int sum[150]; int temp;原创 2013-08-13 10:58:09 · 312 阅读 · 0 评论 -
POJ1015 Jury Compromise
类似于背包问题,n个人每一个都有取或者不取。在0-1背包中,定义一个递归式dp[i][j],表示前i个物品,在背包容量大小为j的情况下,最大装载量。动态规划方程如下:dp[i][j] = max(dp[i-1][j], dp[i-1][j-c[i]+v[i]) 在这个问题中,d[i]-p[i]看成背包中每个物品占用的体积。设dp[i][j][k]前i个人中选择j个人差值为k的总分最大和。状态转移原创 2013-08-13 10:58:19 · 370 阅读 · 0 评论 -
POJ1125 Stockbroker Grapevine
Floyd求每点到其它点的最短路,最长路径即是传播所需的最大时间。 #include #include #include #include using namespace std; bool cmp(int a, int b) { return a > b; } int main() { int t; int n; int contact; in原创 2013-08-13 10:58:16 · 369 阅读 · 0 评论 -
POJ1018 Communication System
动态规划题目: 有一个系统有n个设备,每个设备有m个制造商,每个制造商制造的设备的最大带宽和价值是不同的,题目要求计算n个设备组成的系统中 max(B/P)。其中B为带宽最小值,P为最大值。 解题思路: 选出所有带宽的最大值和最小值,定下带宽,随后从小到大枚举。 剪枝——对每个厂商的设备按带宽从大到小枚举,若最大带宽都小于我们占定的带宽,则不需要在对这种情况枚举,直接剪枝。 代码: #i原创 2013-08-13 10:58:07 · 451 阅读 · 0 评论