动态规划
文章平均质量分 53
song_3211
如果一件事情你不能讲清楚,十有八九你还没有完全理解
展开
-
计数类DP
1. 整数划分一个正整数n可以表示成若干个正整数之和,形如:n = n1 + n2+···+nk,其中n1>=n2>=···>=nk,k>=1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。分析:参照完全背包做法,相当于在1~n中选择物品,且总体积为n的方案数,每件物品可选任意次#include<bits/stdc++.h>using namespace std;const int N = 1010原创 2021-02-04 17:38:19 · 109 阅读 · 0 评论 -
区间DP
1.石子合并设有N堆石子排成一排,其编号为1、2、3、···、N,每堆石子有一定的质量,可以用一个整数来描述,现在将这N堆石子合并为一堆,每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同,找出一种合理的方法,使总的代价最小,输出最小代价。#include<bits/stdc++.h>using namespace std;const int N=310;int n,s[N],f[N][原创 2021-02-04 16:31:35 · 76 阅读 · 0 评论 -
线性DP
1. 数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5从上到下:#include<bits/stdc++.h>using namespace std;const int N=510,INF = 1e9;/** D原创 2021-02-03 23:03:47 · 92 阅读 · 0 评论 -
背包问题
一、背包问题:1. 01背包问题有N件物品和一个容量是V的背包,每件物品只能使用一次,第i件物品的体积是ViV_iVi,价值是WiW_iWi,求将哪些物品放入背包,可以使这些物品的总体积不超过背包容量,且总价值最大。#include<bits/stdc++.h>using namespace std;const int N = 1010;int f[N][N],v[N],w[N];int n,m;int main(){ cin >> n >>原创 2021-02-03 19:33:09 · 612 阅读 · 0 评论