zoukankan      html  css  js  c++  java
  • codeforces 1437C

    题目链接:https://codeforces.com/problemset/problem/1437/C

    用时少的一定比用时大的先拿更优,所以按用时大小排个序,
    然后按顺序 (dp),用时最多不会超过 (2*n)

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<cmath>
    #include<stack>
    #include<queue>
    using namespace std;
    typedef long long ll;
    
    const int maxn = 210;
    
    int T, n;
    int a[maxn], f[maxn][maxn*2];
    
    struct P{
    	int t,id;
    }p[maxn];
    
    bool cmp(P x, P y){ return x.t < y.t; }
    
    ll read(){ ll s=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*f; }
    
    int main(){
    	T = read();
    	while(T--){
    		memset(f,0x3f,sizeof(f));
    		int ans = f[0][0];
    		n = read();
    		for(int i=1;i<=n;++i) p[i].t = read(), p[i].id = i;
    		sort(p+1,p+1+n,cmp);
    
    		for(int i=1;i<=n;++i) printf("%d ",p[i].t); printf("
    ");
    
    		for(int j=1;j<=2*n;++j) f[1][j] = abs(p[1].t - j);
    		for(int i=1;i<=n;++i){
    			for(int j=1;j<2*n;++j){
    				f[i][j+1] = min(f[i][j+1],f[i-1][j] + (j+1-p[i].t));
    			}
    		}
    		
    		for(int i=1;i<=n;++i){
    			printf("%d:",i);
    			for(int j=1;j<=2*n;++j){
    				printf("%d ",f[i][j]);
    			}printf("
    ");
    		}
    		
    		for(int j=p[n].t;j<=2*n;++j){
    			ans = min(ans, f[n][j]); 
    		} 
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I作业07
    C语言博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
  • 原文地址:https://www.cnblogs.com/tuchen/p/13899337.html
Copyright © 2011-2022 走看看