【动态规划】Part1
1. 硬币找零
题目描述:假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。
分析: dp [0] = 0
dp [1] = 1 + dp [1-1]
dp [2] = 1 + dp [2-1]
dp [3] = min (dp [3 - 1] + 1, dp [3 - 3] + 1)
#include<iostream>
#include<algorithm>
#define INF 32767
using namespace std; int dp[];
int coin[] = { , , }; int main()
{
int sum;
cin >> sum;
dp[] = ;
for (int i = ; i <= ; ++i)
dp[i] = INF;
for (int i = ; i <= sum; ++i)
for (int j = ; j <= ; ++j)
if (coin[j] <= i)
dp[i] = min(dp[i], dp[i - coin[j]] + );
cout << dp[sum] << endl;
return ;
}
2. 最长递增子序列
• 题目描述:最长递增子序列(Longest Increasing Subsequence)是指找到一个给定序列的最长子序列的长度,使得子序列中的所有元素单调递增。
给定一个序列,求解它的最长 递增 子序列 的长度。比如: arr[] = {3,1,4,1,5,9,2,6,5} 的最长递增子序列长度为4。即为:1,4,5,9
#include<iostream>
#include<algorithm>
using namespace std; int arr[] = { , , , , , , , , };
int dp[]; int main()
{
for (int i = ; i < ; ++i)
dp[i] = ;
for (int i = ; i < ; ++i)
for (int j = ; j < i; ++j)
if (arr[i] > arr[j])
dp[i] = max(dp[i], dp[j] + );
int mi = ;
for (int i = ; i < ; ++i)
mi = max(mi, dp[i]);
cout << mi << endl;
return ;
}
3. 数字三角形
| Problem description | |
|
|
| Input | |
| Your program is to read from standard input. The first line contains one integer T, the number of test cases, for each test case: the first line contain a integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99. | |
| Output | |
| Your program is to write to standard output. The highest sum is written as an integer for each test case one line. | |
| Sample Input | |
1 5 |
|
| Sample Output | |
30 |
|
| Problem Source | |
| IOI 1994 |
代码:
#include<iostream>
#include<algorithm>
using namespace std; int dp[][];
int arr[][]; int main()
{
int N;
cin >> N;
if (N == )
cout << N;
for (int i = ; i < N; ++i)
for (int j = ; j <= i; ++j)
cin >> arr[i][j];
for (int i = ; i < N; ++i)
dp[N - ][i] = arr[N - ][i];
for (int i = N - ; i >= ; --i)
for (int j = ; j <= i; ++j)
dp[i][j] = max(arr[i][j] + dp[i + ][j], arr[i][j] + dp[i + ][j + ]);
cout << dp[][] << endl;
return ;
}
4. 最大最大连续子序列和/积
• 求取数组中最大连续子序列和,例如给定数组为A={1, 3, -2, 4, -5}, 则最大连续子序列和为6,即1+3+(-2)+ 4 = 6。
• 求取数组中最大连续子序列积。
参考资料
• 常见动态规划问题分析与求解• 关于序列的面试题2------------最大连续子序列和以及积
【动态规划】Part1的更多相关文章
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- Linux平台 Oracle 11gR2 RAC安装Part1:准备工作
一.实施前期准备工作 1.1 服务器安装操作系统 1.2 Oracle安装介质 1.3 共享存储规划 1.4 网络规范分配 二.安装前期准备工作 2.1 各节点系统时间校对 2.2 各节点关闭防火墙和 ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
随机推荐
- JAVA记录-java代码优化策略
java代码优化策略 1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int ...
- Codeforces 15 E. Triangles
http://codeforces.com/problemset/problem/15/E 题意: 从H点走下去,再走回H点,不能走重复路径,且路径不能把黑色三角形包围的方案数 中间的黑色三角形把整张 ...
- Html-Css 从入门到放弃(一)基础知识
注意要点: 1.ID属性不要以数字开头,数字开头的ID在 Mozilla/Firefox 浏览器中不起作用. 2.class 选择器用于描述一组元素的样式,class 选择器有别于id选择器,clas ...
- typealias
类的别名
- JAVA 动态代理学习记录
打算用JAVA实现一个简单的RPC框架,看完RPC参考代码之后,感觉RPC的实现主要用到了两个方面的JAVA知识:网络通信和动态代理.因此,先补补动态代理的知识.---多看看代码中写的注释 参考:Ja ...
- [C++]埃拉托色尼算法
/* 埃拉托色尼算法 问题描述:定义一个正整数n,求0-n范围以内的所有质数 @date 2017-03-06 @author Johnny Zen */ #include<iost ...
- transform,变换
1.transform属性:rotate(翻转),skew(倾斜),scale(缩放),translate(移位) 用法:transform: rotate(45deg) scale(0.5) ske ...
- JQuery基础概念--$符号的实质
$符号的实质 //$其实就是一个函数,以后用$的时候,记得跟小括号 $(); //参数不同,功能就不同 //3种用法 //1. 参数是一个function, 入口函数 $(function () { ...
- android aysncTask面试解析
- ditto复制增强
1.下载 http://ditto-cp.sourceforge.net/ 2.用法 ctrl+` ctrl+数字 或者 ctrl +` 然后用鼠标选择 soeasy