hdu 3480 Division (四边形不等式优化DP)
来源:互联网 发布:工信部大数据认证考试 编辑:程序博客网 时间:2024/05/17 06:05
题目描述
传送门
题目大意:将n个数划分到m个集合中,每个集合的代价是集合中最大元素与最小元素差的平方。求划分的最小代价。
题解
这个问题可以贪心的想,必然是权值接近的分成一个集合。
那么我们只要把权值排序,问题就又变成了划分问题。
然后一如既往的用四边形不等式优化。。。。
代码
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#define LL long long #define inf 1000000000using namespace std;int val[10003],dp[10003][5003],s[10003][5003];int n,m,T;int pow(int x){ return x*x;}int main(){ freopen("a.in","r",stdin); scanf("%d",&T); for (int t=1;t<=T;t++) { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&val[i]); sort(val+1,val+n+1); //for (int i=1;i<=n;i++) cout<<val[i]<<" "; //cout<<endl; memset(dp,0,sizeof(dp)); for (int i=1;i<=n;i++) dp[i][1]=pow(val[i]-val[1]),s[i][1]=0; for (int i=2;i<=m;i++) { s[n+1][i]=n; for (int j=n;j>i;j--) { dp[j][i]=inf; for (int k=s[j][i-1];k<=s[j+1][i];k++) { int tmp=dp[k][i-1]+pow(val[j]-val[k+1]); if (tmp<dp[j][i]) dp[j][i]=tmp,s[j][i]=k; } } } printf("Case %d: %d\n",t,dp[n][m]); }}
0 0
- HDU 3480 Division【dp四边形不等式优化】
- hdu 3480 Division (四边形不等式优化DP)
- hdu 3480 Division (斜率优化||四边形不等式)
- Division - HDU 3480 斜率优化,四边形不等式优化
- Hdu3480 Division dp+四边形不等式优化
- 【HDU3480】Division-DP+四边形不等式优化+贪心
- hdu 3480 dp 四边形不等式优化
- hdu 3480 Division(dp四边形优化)
- dp四边形优化 Hdu 3480 Division 题解
- HDU - 3480 Division(四边形优化)
- HDU 2829 Lawrence(DP+四边形不等式优化)
- hdu 2829 Lawrence (四边形不等式优化DP)
- hdu 3516 Tree Construction (四边形不等式优化DP)
- HDU 2829 Lawrence(四边形不等式优化DP)
- HDU 2829 Lawrence【dp四边形不等式优化】
- hdu 3516 dp+四边形不等式优化
- hdu 3506 dp+四边形不等式优化
- hdu 2829 dp+四边形不等式优化
- 怎样进行Xss攻击
- 命令模式——邮局发信
- POJ-2011-Primary X-Subfactor Series【位运算】【记忆化搜索】【好题】
- 实现虚拟机上CentOS 7网络外部通信
- 责任链模式——学生请假
- hdu 3480 Division (四边形不等式优化DP)
- 不可变类
- Linux线程(pthread)学习笔记
- hdu5875 二分加st
- 可执行"宏替换"的final变量
- Linux下分卷解压
- 反转链表
- 利用jsoup和httpclient来进行网站的爬取
- Java产生死锁的一个简单例子