A
【跑步计划——日期问题】-CSDN博客
B
【残缺的数字】-CSDN博客
C
题目
代码
#include <bits/stdc++.h> using namespace std; void change(int &x) { int sum = 0, t = x; while(t) { sum += t % 10; t /= 10; } x -= sum; } int main() { int n; cin >> n; int ans = 0; while(n) { change(n); ans++; } cout << ans; }
复制
D
【定时任务——日期问题+字符串格式】-CSDN博客
E
【2023——二项式反演】-CSDN博客
F
题目
分析
01背包变种,多考虑一种选法,多开一个维度。由于内存限制,还得采用滚动数组(一般用滚动要清空,背包特殊)。
代码
#include <bits/stdc++.h> using namespace std; const int N = 210; const int M = 1010; int f[2][M][M]; int w[N]; int main() { int n, a, b; cin >> n >> a >> b; for(int i = 1; i <= n; i++) cin >> w[i]; for(int i = 1; i <= n; i++) for(int j = 0; j <= a; j++) for(int k = 0; k <= b; k++) { f[i&1][j][k] = f[i-1&1][j][k]; if(j-w[i] >= 0) f[i&1][j][k] = max(f[i&1][j][k], f[i-1&1][j-w[i]][k] + w[i]); if(k-w[i] >= 0) f[i&1][j][k] = max(f[i&1][j][k], f[i-1&1][j][k-w[i]] + w[i]); } cout << f[n&1][a][b]; return 0; }
复制
#include <bits/stdc++.h> using namespace std; const int N = 210; const int M = 1010; int f[M][M]; int w[N]; int main() { int n, a, b; cin >> n >> a >> b; for(int i = 1; i <= n; i++) cin >> w[i]; for(int i = 1; i <= n; i++) for(int j = a; j >= 0; j--) for(int k = b; k >= 0; k--) { f[j][k] = f[j][k]; if(j-w[i] >= 0) f[j][k] = max(f[j][k], f[j-w[i]][k] + w[i]); if(k-w[i] >= 0) f[j][k] = max(f[j][k], f[j][k-w[i]] + w[i]); } cout << f[a][b]; return 0; }
复制
G
【走方格——BFS,增加更新方式】-CSDN博客
H
【最大区间——枚举 + 单调栈】-CSDN博客
I
待续
J
【选段排序——堆】-CSDN博客