[Boring eventos de prueba] T3 uso compartido del coche del taxi

Es una típica mochila Nota Ideas codiciosos: Si lo hace este coche, lo estás lleno.

\ (I, j \) veces el número total de personas que se salvaron y ahora siento en el \ (dp [i] [ j] \) la cantidad mínima de dinero para venir a esta estadística estatales

#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();
}

¿Por qué deberíamos abrir 2 * n? Porque a veces más que el número de piloto n. Podemos estar estrictamente limitado nPero soy vago, Por lo que abrieron una mayor garantía sin errores

Supongo que te gusta

Origin www.cnblogs.com/DannyXu/p/12536349.html
Recomendado
Clasificación