zoukankan      html  css  js  c++  java
  • [无聊测试赛] T3 出租车拼车

    又是一个典型的背包.注意贪心思路:如果你要做这辆车,你就坐满他.

    (i,j)分别存坐上去的人总人数和现在的时间(,dp[i][j]) 统计来到这个状态的最小钱数

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int MAXN = 1e2+5;
    int n,k,d,s;
    int dp[MAXN<<1][MAXN],ans = 1e9;
    inline void update(int a, int b){
      for (int i=n;i>=0;i--){//倒序背包
        for (int j=b;j>=0;j--){//时间也倒序
          dp[i+a][b] = min(dp[i+a][b],dp[i][j]+d+(n-i)*(b-j));
        }
      }
    }
    inline void find_ans(){
      for (int i=2*n-1;i>=n;i--){
        for (int j=s;j>=0;j--){
          ans = min(ans,dp[i][j]);
        }
      }//找最小满足所有人到达的时间
      if (ans==1e9) cout << "impossible";
      else cout << ans;
    }
    int main(){
      cin >> n >> k >> d >> s;
      memset(dp,0x3f3f,sizeof(dp));
      dp[0][0] = 0;
      for (int i=0;i<k;i++){
        int a,b; cin >> a >> b;
        update(b,a);
      }
      find_ans();
    }
    

    为啥要开2*n?因为有时候搭车人数会超过n.我们可以严格限制在n里但是我懒,于是就开大一点保证无错

  • 相关阅读:
    象棋中马的遍历
    字符串压缩
    寻找丑数
    Educoder
    Educoder
    以太坊:EVM的存储结构
    以太坊:EVM执行字节码的过程
    以太坊:底层序列化编码方式RLP
    以太坊:在合约里调用指定地址的另一已部署合约
    以太坊:创建合约
  • 原文地址:https://www.cnblogs.com/DannyXu/p/12536349.html
Copyright © 2011-2022 走看看