caioj 1077 dp
来源:互联网 发布:中国十大网络作家 编辑:程序博客网 时间:2024/06/09 21:37
题目描述
【问题描述】
共N根筷子,长度为T1,T2,T3,……,TN。组成K+3对,使每双的筷子长度差的平方和最小。
【输入文件】
输入文件共有两行,第一行为两个用空格隔开的整数,表示N,K(1≤N≤100,0<K<50),第二行共有N个用空格隔开的整数,为Ti每个整数为1~50之间的数。
【输出文件】
输出文件仅一行。如果凑不齐K+3双,输出-1,否则输出长度差平方和的最小值。
i表示筷子的双数。j表示筷子下标。
转移方程:f[i][j]=min(f[i][j],min(f[i-1][j-2]+(a[j-1]-a[j])*(a[j-1]-a[j]),f[i][j-1]));
从i-1双时再选一双或直接不选筷子跳过来。
注意初始化为
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,k,f[110][110],a[101];int main(){scanf("%d%d",&n,&k);for (int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+1+n);memset(f,0x3f,sizeof(f));f[0][0]=0;if (((k+3)*2)>n) {printf("-1");return 0;}else{for (int i=1;i<=k+3;i++)for (int j=2;j<=n;j++) {f[i][j]=min(f[i][j],min(f[i-1][j-2]+(a[j-1]-a[j])*(a[j-1]-a[j]),f[i][j-1]));}printf("%d",f[k+3][n]);return 0; }}
maxlongint后要将f[0][0]赋为0,否则你的值只会超级大!
阅读全文
0 0
- caioj 1077 dp
- caioj 1070 dp
- caioj 1078 dp
- 小白算法练习 树状dp caioj 二分苹果树
- [caioj 1114]多叉苹果树---树形dp+01背包
- [caioj 1425][状态压缩]游戏---状态压缩dp
- caioj.1097 树状数组
- caioj.1031 搜索初步
- caioj.1032 搜索初步
- caioj.1033 搜索初步
- caioj.1034 搜索初步
- caioj.1035 搜索初步
- caioj.1036 搜索初步
- caioj.1037 搜索初步
- caioj.1038 搜索初步
- caioj.1039 搜索初步
- caioj.1040 搜索初步
- caioj.1042 背包搜索
- LWC 50:677. Map Sum Pairs
- 47. 数据结构笔记之四十七的有向无环图的应用排序
- 携程2018 秋招编程题
- Android组件化之终极方案
- 网页性能如何优化
- caioj 1077 dp
- Unity3d六 unity3d资源解析(意义、来源、编辑和查看工具)
- mac设置python版本切换,和设置python默认版本
- mybatis 工作流程
- 2017年9月16日提高组T2 A 电脑都连上互联网
- jersey接口处理微信支付回调,dom4j解析微信消息xml
- 去除字符串中的空格
- 线性代数005之行列式展开定理与零值定理
- 动画加减速