2 条题解

  • 5
    @ 2024-5-26 10:35:00

    我认为另一篇题解有点麻烦,分享一下我的代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,k,d,a[1000005];
    long long val;
    int main(){
        cin>>n>>k>>d;
        for(int i=1;i<=n;i++) cin>>a[i];
        val=a[1];
        for(int i=2;i<=n;i++){
            val=min(val,val+(a[i]-a[i-1])*k-d);
        }
        cout<<val;
    }
    
    • 5
      @ 2023-10-26 18:37:29

      设f[i]表示解决完第i个学生的问题后,花费的最小精力,则

      f[i]=min(f[j]+(a[i]a[j])kd); f[i]=min(f[j]+(a[i]-a[j])*k-d);

      按照i和j变量进行分离,

      f[i]=min(f[j]a[j]k)+(a[i]kd); f[i]=min(f[j]-a[j]*k)+(a[i]*k-d);

      i i 相关变量视为常数,和j j 相关变量需要维护最小值

      #include <bits/stdc++.h>
      #define ll long long
      using namespace std;
      const int N=1000005;
      ll a[N],n,m,k,s,t,d,f[N];
      int main(){
      	cin>>n>>k>>d;
      	for (int i=1;i<=n;++i) cin>>a[i];
      	f[1]=a[1];
      	ll mi=f[1]-a[1]*k;
      	for (int i=2;i<=n;++i){
      		f[i]=mi+(a[i]*k-d);
      		mi=min(mi,f[i]-a[i]*k);
      	}
      	cout<<f[n];
      }
      
      • 1

      信息

      ID
      528
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      (无)
      递交数
      239
      已通过
      122
      上传者