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博客