1 条题解
-
1
首先易得对于每个礼盒所买的,当且仅当相邻时为最优策略,故我们先按照排序,然后用DP求解。
设为枚举到i件商品,j个礼盒的最小不和谐值,我们可以得到以下状态转移方程:
1.不选择:
2.选择(,得确保所有礼盒都有3件商品):
接下来是初始化,令最终答案即为 时间复杂度为
#include<bits/stdc++.h> using namespace std; const int N=3010; int a[N]; int f[N][N]; int n,k; int main(){ memset(f,0x3f,sizeof f); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%d",&a[i]); sort(a+1,a+1+n); f[0][0]=0; for(int i=1;i<=n;i++)f[i][0]=0; for(int i=2;i<=n;i++){ for(int j=1;j<=k;j++){ f[i][j]=f[i-1][j]; if(i>=j*3)f[i][j]=min(f[i][j],f[i-2][j-1]+a[i]-a[i-1]); } } printf("%d\n",f[n][k]); return 0; }
- 1
信息
- ID
- 917
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 120
- 已通过
- 22
- 上传者