1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; const int maxn = 4000400; int n, m, t, maxt; long long f[maxn], cnt[maxn]; int main() { cin >> n >> m; for (int i = 0; i < n; i ++) { cin >> t; cnt[t] ++; if (t > maxt) maxt = t; } for (int i = 0; i <= maxt + m; i ++) { long long tmp = 0; for (int j = 0; j < m && i-j >=0; j ++) { tmp += cnt[i-j] * ( (long long) j ); } f[i] = tmp; if (i >= m) f[i] += f[i-m]; for (int j = m+1; j <= 2*m && i - j >= 0; j ++) { tmp += cnt[i-j+1] * ( (long long) (j-1) ); if (f[i-j] + tmp <= f[i]) f[i] = f[i-j] + tmp; } } long long ans=f[maxt]; for(int i=1;i<=m;i++) { ans=min(ans,f[maxt+i]); } cout<<ans<<endl; return 0; }
信息
- ID
- 3633
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者