【DP问题集】动态规划试题
来源:互联网 发布:最新ip代理软件 编辑:程序博客网 时间:2024/05/05 05:37
1.背包问题
给定n种物品和一背包。物品i的重量是wi,其价值为pi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
分析:
①每个物品只有两种选择,要么就是塞到包里面,要么就是不要了;
②当背包剩余容量为j时,如果第i件物品重量wi>j时,必定是要不了的,如果wi<j时,可以选择要或者不要,因为要了之后背包空间减少,会影响后面的选择;
③假设剩余容量j的背包从i到n这n-i+1种物品中能选出的最大总价值记为m[i,j],那么对于原问题:容量为C的背包,从1到n中物品中能选出的最大总价值则可以记为m[1,C];
④寻找递推式——动态规划,其实就是用递推来代替递归,利用多个相同或者不同的子问题的输出得出一个包含这些子问题的输出,是典型的牺牲空间换取速度的做法。
那么m[i,j]可以分为两种情况
当已知m[i+1,j]时,
m[i,j] = m[i+1, j] , wi>j
m[i,j] = max(m[i+1, j], m[i+1, j-wi]+pi) , wi<j (此处的m[i+1, j-wi]是因为决定选择第i个物品时,剩余空间减少为j-wi)
举个例子:
假设现有5种物品,且它们的重量和价值分别如下所示:
n12345wi12345pi23647背包容量为7。j\i1234512000023300036660048664059977761197777?=11101077那么根据上面的递推公式,我们试试解出m[1,7]=max(m[2,7], m[2,7-1]+2)=max(m[2,7], m[2,6]+2)=max(10, 9+2)=11。2.最长递增序列
给定一个序列,求至少删除几个数,使得序列呈递增序列,返回最长递增序列长度。(递增序列要求ai≤ai+1)
<分析明天给出,敬请期待>
#include <stdio.h>#include <stdlib.h>int input_array(int **a){int n, k;scanf("%d", &n);*a = (int*)malloc(sizeof(int)*n);for(k=0; k<n; k++){scanf("%d", *a+k);}return n;}int maxlen(int *a, int n){int k, mk;int *m;int mlen;if(a==NULL)return 0;m = (int*)malloc(sizeof(m)*n);if(m==NULL)return 0;//初始化dptemp*m = *a;mlen = 1;for(k=1; k<n; k++){for(mk=mlen-1; mk>=0; mk--){if(*(a+k)>=*(m+mk)){if(mk==mlen-1){*(m+mlen) = *(a+k);mlen++;}else{if(*(a+k)<=*(m+mk+1))*(m+mk+1) = *(a+k);}break;}}if(mk==-1){if(*(a+k)<*m)*m = *(a+k);}}free(m);return mlen;}int main(void){int *a, n;n = input_array(&a);printf("maxlen = %d\n", maxlen(a, n));system("pause");return 0;}
0 0
- 【DP问题集】动态规划试题
- 动态规划 DP问题
- 动态规划——看似dp的贪心问题最大乘积(蓝桥杯试题集)
- 【动态规划】背包问题 - dp
- DP动态规划问题(1)
- DP动态规划问题 1300
- DP(动态规划)背包问题
- 动态规划-试题(2)-背包问题
- 01背包问题(动态规划DP)
- 动态规划-3005-经典dp问题
- 01背包问题--dp动态规划
- Dynamic Programming 动态规划问题 DP
- 动态规划 DP leetcode403 青蛙过河问题
- 多重部分和问题-DP动态规划
- 动态规划(DP)问题分析汇总
- DP动态规划-电路布线问题
- 01背包问题(动态规划DP)
- HDOJ1574 RP问题 动态规划 简单DP
- 教教大家javascript打印设置方法
- asp.net MVC + linq to Entity简单教程(三)linq to Entity的基本操作
- JMeter集合点设置
- hdu1023:Train Problem II 之大数相加和状态转移方程
- Qt基础 设计自动适应窗口大小
- 【DP问题集】动态规划试题
- 并行系统与分布式系统区别
- asp.net MVC + linq to Entity简单教程(四)linq to Entity查询中其它方法的使用
- svmrank原理
- C++中auto_ptr智能指针
- 失效用户的职责
- Unity3D面试题-实现吊机吊物体的功能
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- bufferedreader的用法