Dynamic Programming
cwjokaka
GitHub: https://github.com/cwjokaka
展开
-
【动态规划】之多重部分和问题(难度:3星)
#include /** * 原题: * 有N种不同大小的数字a[i], 每种各m[i]个,判断是否可以从这些数字之中 * 选出若干个使它们的和恰好为K */ #define N 6 #define K 35 static int a[N] = {3,5,8,6,10,11}; static int m[N] = {3,2,2,2, 3, 3}; /** * 思路如下: *原创 2017-12-23 02:50:42 · 464 阅读 · 0 评论 -
【动态规划】之硬币找零问题(难度:1星)
#include <stdio.h> /** * 原题: * 假设有几种硬币,如1块、3块、5块,并且数量无限。 * 请找出能够组成某个数目的找零所使用最少的硬币数。 */ #define MIN(x,y) (x<y?x:y) #define INF 50000 //一个很大的值,这里可看作无限大 #define N 5 //有5种硬币 ...原创 2017-12-14 22:56:29 · 943 阅读 · 0 评论 -
【动态规划】之求最长上升子序列长度(难度:2星)
#include /** * 最长上升子序列问题 * 原题:有一个数列,请求出这个数列中最长的上升子序列的长度。 * 例如4,2,3,1,5的最长上升子序列是2,3,5。长度为3 */ #define MAX(x,y) (x>y?x:y) #define N 10 static int a[N+1] = {9,1,5,3,6,8,7,2,1,10,11}; /** * 思路:原创 2017-12-24 17:11:55 · 402 阅读 · 0 评论 -
【动态规划】之字符串编辑距离(难度:2星)
#include /** * 对于序列S和T,它们之间距离定义为:对二者其一进行几次以下的操作 * (1)删去一个字符;(2)插入一个字符;(3)改变一个字符。每进行一次操作,计数增加1。 * 将S和T变为同一个字符串的最小计数即为它们的距离。给出相应算法。 */ #define MIN(x,y) (x<y?x:y) #define INF 50000 #define SL 7原创 2017-12-16 23:35:58 · 292 阅读 · 0 评论 -
【动态规划】之最长公共子序列长度(难度:1星)
#include /** * 原题: * 给定两个字符串S和T,求出这两个字符串的最长公共子序列的长度 * 例如X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A} * 则它们的lcs是4 ({B,C,B,A}和{B,D,A,B})。求出一个即可。 */ #define MAX(x,y) (x>y?x:y) #define SL 7 #define TL 6 sta原创 2017-12-18 02:01:33 · 255 阅读 · 0 评论 -
【动态规划】之01背包问题(难度:2星)
#include /** * 原题: * 一个贼在偷窃一家商店时发现了N件物品,其中第i件值v[i]元,重w[i]磅。 * 他希望偷走的东西总和越值钱越好,但是他的背包只能放下W磅。 * 请求解如何放能偷走最大价值的物品,这里v[i]、w[i]、W都是整数 */ #define MAX(x,y) (x>y?x:y) #define N 5 #define W 11 static i原创 2017-12-17 20:40:54 · 302 阅读 · 0 评论 -
【动态规划】之完全背包问题(难度:2星)
#include /** * 原题: * 一个贼在偷窃一家商店时发现了N种物品,其中第i种值v[i]元,重w[i]磅。 * 他希望偷走的东西总和越值钱越好,但是他的背包只能放下W磅。 * 注意,这里与01背包不同:每件物品可以拿多次 * 请求解如何放能偷走最大价值的物品,这里v[i]、w[i]、W都是整数 */ #define MAX(x,y) (x>y?x:y) #define原创 2017-12-18 21:40:23 · 362 阅读 · 0 评论