ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

codeforces 1437C - Chef Monocarp (dp)

2020-10-29 21:34:47  阅读:297  来源: 互联网

标签:ch int 1437C ll codeforces long Chef maxn include


题目链接: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("\n");

		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("\n");
		}
		
		for(int j=p[n].t;j<=2*n;++j){
			ans = min(ans, f[n][j]); 
		} 
		printf("%d\n",ans);
	}
	return 0;
}

标签:ch,int,1437C,ll,codeforces,long,Chef,maxn,include
来源: https://www.cnblogs.com/tuchen/p/13899337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有