2025-11-13
1.Problem - 1881E - Codeforces(1500)(dp)
dp好题
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL mod = 998244353;
const int N=2e5+10;
int a[N], inf = 1e9, dp[N];
void solve()
{
int n;
cin >> n;
for (int i = 0; i < n;i++){
cin >> a[i];
}
for (int i = 0; i <= n;i++){
dp[i] = inf;
}
dp[0] = 0;
for (int i = 0; i < n;i++){
dp[i + 1] = min(dp[i + 1], dp[i] + 1);
if(i+a[i]+1<=n)
dp[i + a[i] + 1] = min(dp[i + a[i] + 1], dp[i]);
}
cout << dp[n] << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--)
{
solve();
}
}
Problem - 1253C - Codeforces(1500)(dp)
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const LL mod = 998244353;
const int N=2e5+10;
LL a[N],dp[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n);
for (int i = 1; i < n; i++)
{
a[i] += a[i - 1];
}
for (int i = 0; i < n; i++)
{
if (i < m)
dp[i] = a[i];
else
dp[i] = dp[i - m] + a[i];
cout << dp[i] << " ";
}
cout << endl;
}
碎碎念
之前刷的1200~1400的dp题,基本都可以用贪心或者模拟直接解出来
1500才正式到dp的刷题!
感觉每题都是看答案慢慢理解的
多刷多刷

浙公网安备 33010602011771号