zoukankan      html  css  js  c++  java
  • 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
    ");
    		}
    		else{
    			printf("%d
    ",ans);
    		}
    	}
    }
    
  • 相关阅读:
    sas 基础(1)-关于数据格式的SAS函数
    sas 命令行打开SAS IDE 的代码
    获取指定数据集观测数
    sas spawner
    sas 解析json
    正则表达式(更新中。。。)
    async await的简单使用
    element ui只输入数字校验
    element ui中表单循环项的校验
    微信小程序template和组件
  • 原文地址:https://www.cnblogs.com/whitelily/p/14065844.html
Copyright © 2011-2022 走看看