codeforces714E Sonya and Problem Wihtout a Legend

mac2024-10-16  2

https://codeforces.com/problemset/problem/714/E

跟poj3666差不多

https://blog.csdn.net/liufengwei1/article/details/102844609

不过这里是要求B数列是严格上升子序列

我们可以构造a[i]=a[i]-i,这样就保证了A序列至少相差了1,那么最后只要求对于新的A序列的构造不严格上升子序列的答案就可以了

#include<bits/stdc++.h> #define maxl 3010 using namespace std; int n,m; int a[maxl],b[maxl]; long long ans; long long f[maxl][maxl]; inline void prework() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]-=i,b[i]=a[i]; sort(b+1,b+1+n); m=unique(b+1,b+1+n)-b-1; } inline void mainwork() { long long tmp; for(int i=1;i<=n;i++) { tmp=1ll<<62; for(int j=1;j<=m;j++) { tmp=min(tmp,f[i-1][j]); f[i][j]=tmp+abs(a[i]-b[j]); } } ans=1ll<<62; for(int j=1;j<=m;j++) ans=min(ans,f[n][j]); } inline void print() { printf("%lld",ans); } int main() { prework(); mainwork(); print(); return 0; }

 

最新回复(0)