Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B
来源:互联网 发布:ise女装官网淘宝网 编辑:程序博客网 时间:2024/06/09 23:05
B Minimization
给一个数列,任意安排顺序,让所有下标距离为k的两个元素作差,取绝对值,全部加起来,问和最小是多少。
分析一下就能知道,根据下标取模得数的不同,可以把这些数分为k组。在最优解情况下,每一组可以让里面的数单调,并且不同组之间也单调,然后就是dp了。比赛的时候想了好久没想清楚怎么dp,功力尚浅啊。。因为我总想着用元素的下标表示状态。。。其实,k组数里面,有n%k个大组,k-(n%k)个小组,大组比小组多一个数,组数最多为5000。只需要用大组和小组各有多少个来表示状态即可。解题难点在于巧妙表示状态!
#include<bits/stdc++.h>using namespace std;#define ll long longconst ll INF = 1000000000000000LL;int a[300010];ll dp[5010][5010];int main(){ int n,k; cin>>n>>k; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); int gsize = n/k; int l = n%k; int s = k-l; for(int i=0;i<=k;i++){ for(int j=0;j<=min(s,i);j++){ dp[j][i-j]=INF; } } ll ans=INF; dp[0][0]=0; for(int i=1;i<=k;i++){ for(int j=0;j<=min(s,i);j++){ //small:j,large:i-j; int pos = i*gsize+(i-j)-1; if(j>0)dp[j][i-j]=min(dp[j][i-j],dp[j-1][i-j]+a[pos]-a[pos-gsize+1]); if(i-j>0)dp[j][i-j]=min(dp[j][i-j],dp[j][i-j-1]+a[pos]-a[pos-gsize]); if(i==k&&s==j){ ans=min(ans,dp[j][k-j]); } } } cout<<ans<<endl; return 0;}
0 0
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)(A,B)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B. Minimization 贪心 dp
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)A Arrays
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) D. Minimization
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) Minimization dp
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) B. Order Book
- B. Order Book------(Codeforces Round #317 [AimFund Thanks-Round] (Div. 2))
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) B Order Book
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1)(组合数学+容斥)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) A. Lengthening Sticks 分类
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) C. CNF 2 无向图找环
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) C(组合数+容斥)
- A. Arrays------(Codeforces Round #317 [AimFund Thanks-Round] (Div. 2))
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) C. Lengthening Sticks(数学)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) D. Minimization(dp)
- prototype原型
- Qt Animation
- 文章标题
- 为自己而留的
- Java- Lambda表达式
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B
- hdu 2255 奔小康赚大钱(完美最大权匹配 KM算法)
- CCAnimation源码解析
- 基于opencv的神经网络算法实现两类分类问题的可视化演示
- HDU 1997 汉诺塔VII(递归)
- 使用不带头结点的循环链表实现队列(数据结构)
- QTcpSocket 编程
- Linux 操作系统下如何优雅的卸载软件
- MySQL 插入数据时,中文乱码问题的解决