本月博客排行
-
第1名
wy_19921005 -
第2名
mft8899 -
第3名
java-007 - Anmin
年度博客排行
-
第1名
龙儿筝 -
第2名
宏天软件 -
第3名
benladeng5225 - wy_19921005
- vipbooks
- 青否云后端云
- kaizi1992
- e_e
- tanling8334
- sam123456gz
- arpenker
- zysnba
- fantaxy025025
- xiangjie88
- wallimn
- lemonhandsome
- jh108020
- ganxueyun
- Xeden
- zhanjia
- xyuma
- wangchen.ily
- johnsmith9th
- zxq_2017
- forestqqqq
- jbosscn
- daizj
- ajinn
- xpenxpen
- 喧嚣求静
- kingwell.leng
- lchb139128
- kristy_yy
- jveqi
- javashop
- lzyfn123
- sunj
- yeluowuhen
- lerf
- silverend
- xiaoxinye
- chenqisdfx
- flashsing123
- bosschen
- lyndon.lin
- zhangjijun
- sunnylocus
- lyj86
- paulwong
- sgqt
最新文章列表
动态规划(dynamic programming)
方法概述: 发展及研究内容
动态规划(dynamic programming)是运筹学的一个分支,20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—— ...
最少硬币数问题
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* c1...cn个硬币,面值各不相同,现要用最少的硬币数,使得钱数为k,给出方案
* @author sky
*
* 设dp[i]为k为i时,最少需要的硬币个数
...
算法-动态规划:一个数组a[0...n-1],求a[j]-a[i]的最大值,其中i<j
其中数组a[n]是无序的,求a[j]-a[i]的最大值,且i<j,解此题有两种算法:
第一种方法:
从左往右求下标0到 k - 1 的最小值MIN从右往左求 下标k到n -1 的最大值MAX
对于每个k都有一个MAX - MIN的值,最后求这个值的最大值即可。
例如数组:4 5 2 6 3 1
K:1 2 3 4 5
MIN: 4 4 2 2 2
MAX:6 6 6 ...
HDU 1421 搬寝室
/*
状态转移方程:d[i][j] = min(d[i][j - 1], d[i - 1][j - 2] + (A[j] - A[j - 1]) * (A[j] - A[j - 1]))
d[i][j]:表示前j个物品搬运i次最小的疲劳度
*/
#include <iostream>
#include <cmath>
using namespace std;
const ...
tyvj p1096 0-1背包求种数
在N个数中找出其和为M的若干个数。先读入正整数N(1<N<100)和M(1<M<10000), 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同)。要求你的程序运行时间不超过1秒。
...
POJ 4374 单调队列优化 DP
这题的转移很明显。
用dp[i][j] 表示到达i层j位置时的最大得分
sum[i][j] 表示第i层前j个数的和
dp[i][j] = max(max(dp[i - 1][j + k] + sum[i-1][j +k-1] - sum[i - 1][j - 1] + score[i][j]), max(dp[i - 1][j - k] - sum[i-1][j -k] + sum[i ...
FOJ2013-最大子段和
FOJ2013
限定子段长度最短为m,,贴个我的超时代码Time Limit Exceed 哈哈
方法和 hdu1003 一样
#include<iostream>
#include<stdio.h>
using namespace std;
int num[1000001],n,m;
int getn(int x)
{
int i, ...
HDOJ 1024 Max Sum Plus Plus
/*超时。题意:输出m个子序列和的最大值思路:动态规划 + 滑动数组d[m][j] = max(d[m][j - 1] + e[j], max(d[m - 1][k] + e[j]) | k ∈ [m -1, j)).表示前j个序列分割成m组,最大序列和因为状态方程中只用到d[m]和d[m - 1]两个状态,所以只需要一个二维数组即可。优化:至于max(d[m - 1][k] + e[j])过程,可 ...
关于最长递增子序列的实际应用--动态规划
参考链接:
a.http://www.programfan.com/blog/article.asp?id=13086
b.http://blog.csdn.net/hhygcy/article/details/3950158
1.对(http://hao3100590.iteye.com/blog/1548135)中问题6:最长递增子序列的改进,减少时间复杂度
算法的思想:
它 ...
动态规划
该文章转载自:http://www.cppblog.com/Fox/archive/2008/05/07/Dynamic_programming.html
非常感谢!
以前在学习非数值算法的时候,曾经了解过动态规划算法(Dynamic programming),以下是对Wikipedia上动态规划的翻译,图也是Wikipedia上的,仓促行文,不到之处,请方家指正。
这篇文章的术语实在是 ...
最长公共子序列
最长公共子序列(动态规划解决)
其中:某个序列的子序列定义为原序列中的0个或多个元素被去掉之后剩下的元素序列。
给定两个序列
X = { x1 , x2 , … , xm }
Y = { y1 , y2 , … , yn }
求X和Y的一个最长公共子序列
举例
X = { a , b , c , b , d , a , b }
Y = { b , d , c , a , b , ...
动态规划
动态规划常见题目解析:
分别为:
1.最长公共子序列
2.最大字段和
3.0-1背包问题
下面逐一描述:
1.最长公共子序列
题目描述:
例如对于X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A},则序列{B,C,B,A}就是X和Y的最长公共子序列。
解法:
按照该思路的解法:
#include <iostream>
using namespa ...