ICode9

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

D. Armchairs(Educational Codeforces Round 109 (Rated for Div. 2)题解)

2021-06-03 10:05:14  阅读:219  来源: 互联网

标签:Educational Rated 题解 long ch static Theta include define


题目链接:D. Armchairs
思路:我们将0的位置放在一个数组中,将1位置放在一个数组中,我们规定每一个1位置都是有序的,即顺序不可以被改变,\(f(i,j)\)表示处理完前i个人,且第i个人坐在第j个板凳上的最小花费,显然\(f(i,j) = min_{p=i-1}^{p=j-1}f(i-1,p) + dis(a[i],a[j])\)然后可以写出\(\Theta(n^3)\)的动态规划,发现\(min_{p=i-1}^{p=j-1}f(i-1,p)\)可以通过处理前缀取\(min\)。\(\Theta(1)\)求解,所以降为\(\Theta(n^2)\)
\(Code:\)


/* -*- encoding: utf-8 -*-
'''
@File    :   255.cpp
@Time    :   2021/05/31 21:05:02
@Author  :   puddle_jumper
@Version :   1.0
@Contact :   1194446133@qq.com
'''

# here put the import lib*/
#include<set>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<map>
#include<algorithm>
#include<vector>
#include<queue>
#define ch() getchar()
#define pc(x) putchar(x)
#include<stack>
#include<unordered_map>
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define ll long long
#define ull unsigned long long
#define pb emplace_back
#define mp make_pair
#define PI acos(-1)
using namespace std;
template<typename T>void read(T&x){
    static char c;
    static int f;
    for(c=ch(),f=1; c<'0'||c>'9'; c=ch())if(c=='-')f=-f;
    for(x=0; c>='0'&&c<='9'; c=ch())x=x*10+(c&15);
    x*=f;
}
template<typename T>void write(T x){
    static char q[65];
    int cnt=0;
    if(x<0)pc('-'),x=-x;
    q[++cnt]=x%10,x/=10;
    while(x)
        q[++cnt]=x%10,x/=10;
    while(cnt)pc(q[cnt--]+'0');
}


const int N = 5e3+10;
int n,a[N];
int f[N][N];
int b[N],c[N],totb ,totc;
int d[N][N];
void solve(){
    read(n);
    memset(f,0x3f,sizeof f);
    rep(i,1,n)read(a[i]);
    rep(i,1,n){
        if(a[i] == 1)b[++totb] = i;
        else c[++totc] = i;
    }
    f[0][0] = 0;
    rep(i,1,totb){
        rep(j,i,totc-totb+i){
            f[i][j] = d[i-1][j-1] + abs(b[i]-c[j]);
            if(j == i)d[i][j] = f[i][j];
            else d[i][j] = min(f[i][j],d[i][j-1]);
           // rep(p,0,j-1)f[i][j] = min(f[i][j],f[i-1][p]+abs(b[i]-c[j]));
        }
    }
    int ans = 9999999;
    if(totb == 0)ans = 0;
    rep(i,totb,totc)ans = min(ans,f[totb][i]);
    write(ans);
}


signed main(){solve();return 0; }



标签:Educational,Rated,题解,long,ch,static,Theta,include,define
来源: https://www.cnblogs.com/violentbear/p/14843971.html

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

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

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

ICode9版权所有