动态规划
文章平均质量分 86
--子非鱼--
一个人幸运的前提是有能力和有条件改变自己
展开
-
nyoj 36 最长公共子序列
动态规划很神奇,在网上看到一位大牛对该类问题的分析,很透彻,转过来吧: 最长公共子序列是一个十分实用的问题,它可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能够用来辨别抄袭。对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,这种方法判断修改的部分,往往十分准确。简而言之,百度知道、百度百科都用得上。 算法 动态规划的一个计算两个序列原创 2013-01-23 10:15:07 · 664 阅读 · 0 评论 -
BNU 1065
简单的数位dp。 题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=1065 直接上代码了: #include #include #include int dp[10005][17]; //dp[i][j]:表示第i个数字转换成二进制后第j位是0还是1 int sum[17]; //sum[j]:表示所有数字转化成二原创 2014-03-23 17:25:27 · 582 阅读 · 0 评论 -
NYOJ 61 传纸条(一)
转自:http://blog.csdn.net/harrypoirot/article/details/20068649 双线程dp; 本题的特点是不只要从A找一条最优的路到B,并且还要有路回来,而且两条路不能有交叉、重合。 要完成这一点,需要一种新思路,也就是说不是真的过去再回来,因为我们的目的是找到“两条”路,而方向则是无所谓的! 所以我们可以从起始点同时计算两转载 2014-03-23 12:45:34 · 781 阅读 · 0 评论 -
矩阵连乘问题
做好充足的准备,你才能在机会到来时狠狠的抓住它!Come on! #include #include const int INF=100; int m[INF][INF],s[INF][INF],p[INF]; // m[i][j]表示从第i个矩阵到第j个矩阵连乘需要进行乘法计算的次数 // s[i][j]=k 表示:m[i][j]最小时,应先计算第ige矩阵到第k个矩阵的乘积, //原创 2013-10-16 17:12:45 · 663 阅读 · 0 评论 -
最大子矩阵和
#include //动态规划思想 #include #define Min -0xfffff using namespace std; const int INF=1e5+5; int num[INF][INF]; int dp[INF]; int max_sum(int n,int temp[]) //求最大连续子序列的和 { int maxsum(Min),sum(0);原创 2013-05-01 20:53:22 · 704 阅读 · 0 评论 -
nyoj 376 小强的Linux
点击打开题目链接 简单树形dp,建立一个总源点就行了。 #include #include #include #include #define Max(a,b) a>b?a:b using namespace std; const int INF=1005; int dp[INF],visit[INF],v[INF]; vector vec[INF]; void dfs(int cur) {原创 2013-04-29 16:35:58 · 660 阅读 · 0 评论 -
nyoj 372巧克力
点击打开题目链接 动态规划 #include #include #include using namespace std; const int INF=310; int num[INF][INF]; int sum_max(int n,int temp[]) { int sum(0),Max(-0xfffff); for(int i=0;i<n;i++) {原创 2013-04-29 09:08:08 · 723 阅读 · 0 评论 -
hdu2191
题目连接点击打开链接 简单的多重背包问题,代码如下: #include #include #include #include #define INF 110 using namespace std; int dp[INF]; void CompletePack(int cost,int weight,int n) { for(int i=cost;i<=n;i++)原创 2013-03-27 11:26:43 · 653 阅读 · 0 评论 -
hdu 3535(混合背包问题)
点击打开题目链接 该题属于混合背包问题,而且还带分组。。。 #include #include #include using namespace std; const int INF=-0xfffff; const int NUM=120; int dp[NUM][NUM],cost[NUM],v[NUM]; template T Max(T a,T b) { return (a>b原创 2013-04-09 18:36:43 · 864 阅读 · 0 评论 -
整数划分问题
【转】: 整数划分 --- 一个老生长谈的问题: 1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数。 2. 将n划分成k个正整数之和的划分数。 3. 将n划分成最大数不超过k的划分数。 4. 将n划分成若干奇正整数之和的划分数。原创 2013-03-25 16:09:52 · 741 阅读 · 0 评论 -
hdu 4501 小明系列故事——买年货(二维费用背包问题)
题目链接~~点我打开题目哦~~ 该题是一道二维费用背包问题,用dp[v1][v2][k]表示用v1的钱,v2的积分和k件免费产品时,能够获得的最大价值,设第i件商品的价钱为c1,积分为d1,价值为val,则状态转移方程可写成: dp[v1][v2][k]=max(dp[v1][v2][k],dp[v1-c1][v2][k]+val,dp[v1][v2-d1][k]+val,dp[v1][v2]原创 2013-04-02 15:03:58 · 1133 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(分组背包)
简单分组背包入门,点击打开题目链接 #include #include #include #define Max(x,y) x>y?x:y int A[110][110]; int f[110]; int main() { int n,m; while(scanf("%d%d",&n,&m) && (m+n)) { for(int i=1;i<=n;i++原创 2013-04-02 16:19:23 · 707 阅读 · 0 评论 -
nyoj 90 整数划分
题目连接点击打开链接 该类问题分析(转自网上一位大牛的分析): 整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式: n=m1+m2+...+mi; (其中mi为正整数,并且1 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi) 例如当n=4时,他有5个划分原创 2013-01-25 09:30:52 · 592 阅读 · 0 评论 -
NYOJ 995硬币找零
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=995 动态规划问题原创 2014-04-04 18:02:47 · 1114 阅读 · 0 评论