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的刷题!
感觉每题都是看答案慢慢理解的
多刷多刷

posted @ 2025-11-13 21:08  Seren_blingbling  阅读(6)  评论(0)    收藏  举报