2023.2.22
“信息竞赛界的出题水平还很不成熟,这和 CCF 的不作为有很大关系。”——N老师
“这是为数不多的,评价是正的题啊(叹)。”——N老师
美好的一天,从没有模拟赛暴虐开始。啊——
谔谔,不会玩 florr、原神,bhs的账号忘了,感觉和机房格格不入。同时也是被 dp 继续摧残的一天,很崩溃捏,直接看题解,然后感觉好妙啊!!!我又感觉我又可以了。
今天放了很多道题,咱自己只弄懂了 3 道,又听了个题。感觉现在看 dp 已经有一定思路了。这个周末把笔记完善一下(几乎都没整理完),然后学一下对拍w。
今天不想打字,于是手写了一下思路,然后贴一下代码。(思路是看的题解,自己感性的理解了一下)。
#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,,,不太感兴趣就不写了。