• D-Lift Problems


    Lift Problems

    题目大意:每个学生乘坐电梯如果不在自己想要停的楼层停下就会产生怒气值,在低于自己楼层停下,在停下的楼层就会产生一个怒气值,如果超过自己的楼层在上升的楼层,每一层都会产生一个怒气值,比如,想在5层楼停,电梯却在8楼停那么6,7两层都会产生怒气值,然后在8楼下电梯走到5楼。

    状态转移方程:A(i)=minj<i A(j)+Pi−1 k=j(i−k)∗sk +Pn k=i sk (j is the previous stop)

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1500+10;
    const int inf=1e9+7;
    int anger[maxn],s[maxn];
    int main()
    {
        freopen("in.txt","r",stdin);
        int t;
        int n;
        scanf("%d",&t);
        while(t--)
        {
          int sum=0;
          scanf("%d",&n);
          for(int i=1;i<=n;i++)
            {
                scanf("%d",&s[i]);
                sum+=s[i];
            }
          anger[0]=0;//0层大家上电梯的那一层愤怒值为0;
          for(int i=1;i<=n;i++)
          {
              sum-=s[i];//去往更高层的同学数量
              int skipanger=0;
              anger[i]=inf;
              for(int j=i-1;j>=0;j--)
            {
                  //int k=j;
                  anger[i]=min(anger[i],anger[j]+sum+skipanger);
                  skipanger+=(i-j)*s[j];//去往底层学生的愤怒值
            }
          }
          cout<<anger[n]<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    SQL数据库——存储过程
    常用命令
    八大排序算法
    Java 反射的理解
    Java 集合的理解(持续更新......)
    JAVA 用数组实现 ArrayList
    JVM 运行时的内存分配
    Java中的增强 for 循环 foreach
    Java 泛型
    《七》随机访问文件流
  • 原文地址:https://www.cnblogs.com/kuroko-ghh/p/9363343.html
Copyright © 2020-2023  润新知