2023.2.22

“信息竞赛界的出题水平还很不成熟,这和 CCF 的不作为有很大关系。”——N老师

“这是为数不多的,评价是正的题啊(叹)。”——N老师


美好的一天,从没有模拟赛暴虐开始。啊——

谔谔,不会玩 florr、原神,bhs的账号忘了,感觉和机房格格不入。同时也是被 dp 继续摧残的一天,很崩溃捏,直接看题解,然后感觉好妙啊!!!我又感觉我又可以了。

今天放了很多道题,咱自己只弄懂了 3 道,又听了个题。感觉现在看 dp 已经有一定思路了。这个周末把笔记完善一下(几乎都没整理完),然后学一下对拍w。


1.洛谷:P2893 Making the Grade G

今天不想打字,于是手写了一下思路,然后贴一下代码。(思路是看的题解,自己感性的理解了一下)。

image

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2010;
int n;
ll a[N],b[N],f[N][N],k[N][N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        b[i]=a[i];
    }
    sort(b+1,b+n+1);
    for(int i=1;i<=n;i++){
        k[i][0]=0x3f3f3f3f;
        for(int j=1;j<=n;j++){
            f[i][j]=k[i-1][j]+abs(a[i]-b[j]);
            k[i][j]=min(k[i][j-1],f[i][j]);
        }
    }
    printf("%lld",k[n][n]);
}

2.洛谷:CF713C Sonya and Problem Wihtout a Legend(luogu)

和上面那道题是类似的,大概是进阶版吧。上面那个是单调递增,这个是严格单调递增,即不能有相等的,那么这里有一个性质的推理,转化成了给 a[i]-i 的序列构造单调递增的序列,这样就转化成了上一个题。这里主要是思维的转化。还是放个感性理解后的推理过程。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3010;
int n;
ll a[N],b[N];
ll minn[N][N],f[N][N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        a[i]-=i;
        b[i]=a[i];
    }
    sort(b+1,b+n+1);
    for(int i=1;i<=n;i++){
        minn[i][0]=2e18;
        for(int j=1;j<=n;j++){
            f[i][j]=minn[i-1][j]+abs(a[i]-b[j]);
            minn[i][j]=min(minn[i][j-1],f[i][j]);
        }
    }
    printf("%lld",minn[n][n]);
    return 0;
}

第三题可以用暴力那为什么要用 dp,,,不太感兴趣就不写了。

posted @ 2023-02-22 19:58  Moyyer_suiy  阅读(24)  评论(0编辑  收藏  举报