学习视频:22-动态规划入门视频讲解_哔哩哔哩_bilibili
动态规划入门:
#include<iostream>
using namespace std;
int main() {
int f100;
f1 = 1;
f2 = 1;
int n;
cin >> n;
for (int i = 3; i <= n; i++) {
fi = fi - 1 + fi - 2;
}
cout << fn;
return 0;
}

Q:错排

#include<iostream>
using namespace std;
int main() {
int f100;
f1 = 0;
f2 = 1;
int n;
cin >> n;
for (int i = 3; i <= n; i++) {
fi = (n - 1) * fn - 1 + (n - 1) * fn - 2;
}
cout << fn;
return 0;
}
错排公式
fi = (n - 1) * fn - 1 + (n - 1) * fn - 2
Q:斐波那契
#include<iostream>
using namespace std;
int main() {
int f100;
f1 = 0;
f2 = 1;
int n;
cin >> n;
f0 = f1 = 1;
for (int i = 2; i <= n; i++) {
fi = fi - 1 + fi - 2;
}
cout << fn;
return 0;
}

Q:杨辉三角

递推公式:
fij = fi - 1j + fi - 1j - 1 ;
#include<iostream>using namespace std;
int f2020;
void init() {
for (int i = 1; i < 20; i++) {
for (int j = 1; j < 20; j++) {
if (j == 1) {
fij = 1;
}
else {
fij = fi - 1j - 1 + fi - 1j;
}
}
}
}
int main() {
init();
int n, m;
cin >> n >> m;
//输出 第i行 第j列
cout << "该位置的数字是:" << fnm << endl;
//输出杨辉三角
for (int i = 1; i <= n; i++) {
for (int ii = 0; ii < n - i; ii++) {
cout << " ";
}
for (int j = 1; j <= i; j++) {
cout << fij << " ";
}
cout << '\n';
}
return 0;
}

Q:

#include<iostream>
#include<string>
using namespace std;
int f3030;
//记录马的位置
int mx, my;
//标记不能走的点
int map3030;
//标记马四周的位置
int dx8 = {1,1,-1,-1,2,2,-2,-2};
int dy8 = {-2,2,2,-2,1,-1,1,-1};
int n,m;
int main() {
cin >> n >> m >> mx >> my;
//初始化map
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
fij = 0;
mapij = 1;
}
}
for (int i = 0; i < 8; i++) {
int fx = mx + dxi;
int fy = my + dyi;
if (fx >= 0 && fx <= n && fy >= 0 && fy <= m) {
mapfxfy = 0;
}
}
mapmxmy = 0;
//递推公式:fij = fi-1j + fij-1
f00 = 1;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
if (mapij != 0) {
if (i != 0 && mapi-1j != 0) {
fij += fi - 1j;
}
if (j != 0 && mapij - 1 != 0) {
fij += fij - 1;
}
}
}
}
cout << fnm;
return 0;
}

Q:

、
#include<iostream>
using namespace std;
int main() {
//递归公式: fij = min(fij-1,fi+1j) + mapij
int f55;
int map55;
//初始化
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> mapij;
fij = 1000;
}
}
int min = 1000;
fn - 10 = 0;
for (int i = n - 1; i >= 0; i--) {
for (int j = 0; j < n; j++) {
if (i != n - 1) {
int tmp = fi + 1j + mapij;
if (tmp < fij)
fij = tmp;
}
if (j != 0) {
int tmp = fij - 1 + mapij;
if (tmp < fij)
fij = tmp;
}
}
}
cout << f0n - 1;
return 0;
}

Q:实现捡水果

#include<iostream>
#include<math.h>
using namespace std;
int main() {
int n;
int f1010;
int map1010;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> mapij;
fij = 0;
}
}
//状态转移方程:fij=max(fi-1j,fi-1j-1)+mapij
f11 = map11;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (i == 1 && j == 1) continue;
//只有右上角
else if (j == 1) {
fij = fi - 1j + mapij;
}
//只有左上角
else if (j == i) {
fij = fi - 1j - 1 + mapij;
}
//都有
else {
if (fi - 1j > fi - 1j - 1)
fij = fi - 1j + mapij;
else
fij = fi - 1j - 1 + mapij;
}
}
}
cout << '\n';
int maxn = 0;
for (int i = 1; i <= n; i++) {
if (fni > maxn)
maxn = fni;
}
cout << maxn;
return 0;
}
/*
4
3
1 2
6 2 3
3 5 4 1
*/

多维状态转移方程
Q:
#include<iostream>
#include<math.h>
using namespace std;
int f100100100;
int main() {
int x, y, z;
cin >> x >> y >> z;
for (int i = 0; i <= x; i++) {
for (int j = 0; j <= y; j++) {
for (int k = 0; k <= z; k++) {
cin >> fijk;
}
}
}
int inf = 10000;
for (int i = 0; i <= x; i++) {
for (int j = 0; j <= y; j++) {
for (int k = 0; k <= z; k++) {
int mi = inf;
if (i != 0)
mi = min(mi, fi - 1jk);
if (j != 0)
mi = min(mi, fij - 1k);
if (k != 0)
mi = min(mi, fijk - 1);
if (mi != inf)
fijk += mi;
}
}
}
cout << fxyz;
return 0;
}
/*
2 2 2
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
*/

蓝桥杯已经考完好几天了,在考场上写了一坨shi,但是决定继续看完学习视频!!
f i g h t i n g ! ! ! ! ! ! !
------------------2024.4.12------
现在是2026/3/16救命!其实已经好久没有学习这一块了哈哈哈,我真是服了我自己了!