1 条题解
-
0
暴力dp
设 f[i][j] 表示 考虑前 i 台设备,第 i 台设备参数为 j 的最小代价
则 ans=min(f[n][j])
for i for j for k f[i][j]=(j-a[i])^2 + min(f[i-1][k]+abs(j-k)*c)复杂度 O(n * 100^2)
#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e5+5, INF=0x3f3f3f3f; int n,c,a[N],f[N][105]; signed main() { // freopen("ex.in","r",stdin); // freopen("ex.out","w",stdout); ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin>>n>>c; int mx=0; for(int i=1;i<=n;i++) { cin>>a[i]; mx=max(mx,a[i]); } memset(f,0x3f,sizeof f); for(int j=a[1];j<=mx;j++)f[1][j]=(j-a[1])*(j-a[1]); for(int i=2;i<=n;i++) { for(int j=a[i];j<=mx;j++) { for(int k=a[i-1];k<=mx;k++) { f[i][j]=min(f[i][j], (j-a[i])*(j-a[i]) + f[i-1][k] + abs(j-k)*c ); } } } int ans=INF; for(int i=0;i<=mx;i++) { ans=min(ans,f[n][i]); } cout<<ans; return 0; }
- 1
信息
- ID
- 287
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 54
- 已通过
- 15
- 上传者