Educational Codeforces Round 99 (Rated for Div. 2)
Educational Codeforces Round 99 (Rated for Div. 2)
D. Sequence and Swaps
题意:给一个数组和x,你可以用x与数组中小于x的元素交换,可交换任意次,最后要求数组非递减。
题解:数据范围都是500,可以考虑3维dp求解,分别是第几个数,当前交换值x,上一个值,对于每个可以交换的状态,即交换时x要比a[p]小且大于等于a[p-1],求解交换的答案,与不交换的答案取最小,遇到不合法情况(a[p-1]大于a[p])直接返回1e9。
#include<iostream>
using namespace std;
int t,n,x,a[507];
int dp[507][507][507];
int dfs(int p,int x,int pre){
if(p==n+1){
return 0;
}
if(pre>a[p]){
return 1e9;
}
if(dp[p][x][pre]!=-1)return dp[p][x][pre];
int ans=1e9;
if(a[p]>x && x>=pre){
ans=min(ans,dfs(p+1,a[p],x)+1);
ans=min(ans,dfs(p+1,x,a[p]));
}
else{
ans=min(ans,dfs(p+1,x,a[p]));
}
return dp[p][x][pre]=ans;
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&x);
for(int i=1;i<=n;i++){
for(int j=0;j<507;j++){
for(int k=0;k<507;k++){
dp[i][j][k]=-1;
}
}
}
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int ans=dfs(1,x,0);
if(ans>=1e9){
printf("-1\n");
}
else{
printf("%d\n",ans);
}
}
}
分类:
ACM算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!