zoukankan      html  css  js  c++  java
  • codeforces 984 E. Elevator

    题目链接:http://codeforces.com/contest/984/problem/E

    题意:就是给你一个9层楼的电梯,然后有n个人,每个人有目前所在楼层和想要去的楼层,然后进出电梯都需要花费1s,电梯上升或者下降1层也需要花费1s。现在要求这n个人上电梯的顺序必须按照给定的顺序,但是出电梯的顺序无所谓(比赛的时候没有看到要按顺序上电梯QAQ)。然后问你最少要花费多少秒把所有人送达。

    分析:学习了大佬的想法

       大佬链接:https://blog.csdn.net/xs18952904/article/details/80358587

       感觉别人写的比较好,自己就不写了,经典题++

    AC代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int dp[2005][11][11][11][11];
     6 int a[2005],b[2005];
     7 int n;
     8 int dfs(int num,int cnt,int x,int y,int z){
     9     int mx=1e8;
    10    // cout<<num<<" "<<x<<" "<<y<<" "<<z<<endl;
    11     if(dp[num][cnt][x][y][z]!=0){
    12         return dp[num][cnt][x][y][z];
    13     }
    14     if(x!=0){
    15         mx=min(mx,dfs(num,x,0,y,z)+abs(cnt-x)+1);
    16     }
    17     if(y!=0){
    18         mx=min(mx,dfs(num,y,x,0,z)+abs(cnt-y)+1);
    19     }
    20     if(z!=0){
    21         mx=min(mx,dfs(num,z,x,y,0)+abs(cnt-z)+1);
    22     }
    23     if(num>n){
    24         if(x==0&&y==0&&z==0){
    25             return 0;
    26         }
    27         else {
    28             return dp[num][cnt][x][y][z]=mx;
    29         }
    30     }
    31     if(x!=0&&y!=0&&z!=0){
    32         mx=min(mx,dfs(num+1,b[num],x,y,z)+abs(cnt-a[num])+abs(a[num]-b[num])+2);
    33         mx=min(mx,dfs(num+1,x,b[num],y,z)+abs(cnt-a[num])+abs(a[num]-x)+2);
    34         mx=min(mx,dfs(num+1,y,x,b[num],z)+abs(cnt-a[num])+abs(a[num]-y)+2);
    35         mx=min(mx,dfs(num+1,z,x,y,b[num])+abs(cnt-a[num])+abs(a[num]-z)+2);
    36     }
    37     else {
    38         if(x==0){
    39             mx=min(mx,dfs(num+1,a[num],b[num],y,z)+abs(cnt-a[num])+1);
    40         }
    41         else if(y==0){
    42             mx=min(mx,dfs(num+1,a[num],x,b[num],z)+abs(cnt-a[num])+1);
    43         }
    44         else {
    45             mx=min(mx,dfs(num+1,a[num],x,y,b[num])+abs(cnt-a[num])+1);
    46         }
    47     }
    48     return dp[num][cnt][x][y][z]=mx;
    49 }
    50 int main(){
    51     ios_base::sync_with_stdio(false);
    52     cin.tie(0);
    53     memset(dp,0,sizeof(dp));
    54     cin>>n;
    55     for(int i=1;i<=n;i++){
    56         cin>>a[i]>>b[i];
    57     }
    58     cout<<dfs(1,1,0,0,0)<<endl;
    59 return 0;
    60 }
    View Code
  • 相关阅读:
    线程安全问题
    Apache DBUtils框架 结果处理器
    编写JDBC框架:(策略设计模式)
    Java编写准备数据源
    理解事务的4种隔离级别
    JavaBeans与内省(Introspector)
    getRequestURI,getRequestURL的区别
    JDBC学习笔记——PreparedStatement的使用
    JDBC的编码步骤
    MySQL 完整性约束
  • 原文地址:https://www.cnblogs.com/ls961006/p/9056174.html
Copyright © 2011-2022 走看看