zoukankan      html  css  js  c++  java
  • 【NOIP2018PJ正式赛】摆渡车

    DP设f[i][j]表示第i个人等了j分钟后开车的最小花费时间。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int t[501],f[501][201],sum[501],n,m;
    
    inline int read()
    {
    	int x=0; char c=getchar();
    	while (c<'0' || c>'9') c=getchar();
    	while (c>='0' && c<='9') x=x*10+c-48,c=getchar();
    	return x;
    }
    
    int main()
    {
    	freopen("bus.in","r",stdin);
    	freopen("bus.out","w",stdout);
    	n=read(),m=read();
    	for (int i=1;i<=n;i++) t[i]=read();
    	sort(t+1,t+n+1);sum[0]=0;
    	for (int i=1;i<=n;i++) sum[i]=sum[i-1]+t[i];
    	memset(f,60,sizeof(f));
    	for (int i=0;i<m;i++) f[0][i]=0,f[1][i]=i;
    	t[0]=-2147483647;
        for (int i=2;i<=n;i++)
        	for (int j=0;j<i;j++)
        		for (int k=0;k<m;k++)
    				if (t[j]+k+m<=t[i]) f[i][0]=min(f[i][0],f[j][k]+t[i]*(i-j)-sum[i]+sum[j]);
    				else f[i][t[j]+k+m-t[i]]=min(f[i][t[j]+k+m-t[i]],f[j][k]+t[i]*(i-j)-sum[i]+sum[j]+(i-j)*(k+m+t[j]-t[i]));
    	int ans=2147483647;
        for(int i=0;i<m;i++)
        	ans=min(ans,f[n][i]);
        printf("%d
    ",ans);
    }
    
    转载需注明出处。
  • 相关阅读:
    5js
    4js
    3js
    2js
    1js
    7css
    6css
    5css
    Django高级项目实战-开发企业级问答网站,学Django就这了
    Java日志第27天 2020.8.1
  • 原文地址:https://www.cnblogs.com/jz929/p/11817741.html
Copyright © 2011-2022 走看看