2 条题解

  • 0
    @ 2025-10-8 16:48:48
    #include <bits/stdc++.h> 
    using namespace std;
    int s[110], f[110];
    int main()
    {
        int L[4], C[4], n;
        for(int i=1;i<=3;i++) scanf("%d", &L[i]);
        for(int i=1;i<=3;i++) scanf("%d", &C[i]);
        scanf("%d", &n);
        int x, y;scanf("%d%d", &x, &y);if(x>y)swap(x, y);
        s[1]=0;for(int i=2;i<=n;i++)scanf("%d", &s[i]);
        memset(f, 63, sizeof(f));
        f[x]=0;
        for(int i=x+1;i<=y;i++)
        {
            for(int j=i-1;j>=x;j--)
                if ( s[i]-s[j] <= L[3]) 
                {
                    for(int k=1;k<=3;k++)if(s[i]-s[j] <= L[k])f[i]=min(f[i], f[j]+C[k]);
                }
                else break;
        }
        printf("%d\n", f[y]);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:48:41
      #include<bits/stdc++.h> 
      using namespace std;
      int  s[110],f[110];
      int main()
      {
          int L[4],C[4],n;
          for(int i=1;i<=3;i++) scanf("%d",&L[i]);
          for(int i=1;i<=3;i++) scanf("%d",&C[i]);
          scanf("%d",&n);
          int x,y;scanf("%d%d",&x,&y);if(x>y)swap(x,y);
          s[1]=0;for(int i=2;i<=n;i++)scanf("%d",&s[i]);
          memset(f,63,sizeof(f));
          f[x]=0;
          for(int i=x+1;i<=y;i++)
          {
              for(int j=i-1;j>=x;j--)
                  if ( s[i]-s[j]<=L[3]) 
                  {
                      for(int k=1;k<=3;k++)if(s[i]-s[j]<=L[k])f[i]=min(f[i],f[j]+C[k]);
                  }
                  else break;
          }
          printf("%d\n",f[y]);
          return 0;
      }
      • 1

      *【动态规划:状态设计DP】火车票

      信息

      ID
      250
      时间
      1000ms
      内存
      128MiB
      难度
      2
      标签
      递交数
      52
      已通过
      32
      上传者