题目链接

说实话挺喜欢soj的界面,简简单单,没有多余的东西hhh(但是简单到连内存限制,时间限制都看不到了。

题意是有个“奇葩”的主人公,吃饭要用三根筷子。两根短的一根长的。

现在给你n根筷子,要在里面挑k+8对筷子(一对三根,有一根最长的,设为Ai <= Bi <= Ci (Ai-Bi)^ 2 叫做 badness)使得

$\sum ^{k}_{i=1}\left( A_{i}-B_{i}\right) ^{2}$ 最小

emmmmm其实不放在dp分类里面我看不出是dp,以为是贪心(太菜了

dp[i][j]表示前i根筷子里面取j对的badness的最小值

正着取怎么取怎么不舒服,因为不知道以谁结尾,第i-3根在之前取过吗 第i-2根在之前取过吗 第i-1根在之前取过吗 有最大的跟这些匹配吗,

所以就由大到小取,只要 3 * j <= i,就有大的跟这一组对应。

转移方程dp[i][j] = min(dp[i-1][j], dp[i-2][j-1] + (l[i] - l[i-1])^2)

不过会卡内存,dp数组得设得刚刚好,不然就用滚动数组(菜到不会

时间复杂度O(kn)

代码如下

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; const int maxn = + ;
int n, k, l[maxn], dp[maxn][maxn/]; int main() {
int T; scanf("%d", &T);
while (T--) {
scanf("%d%d", &k ,&n);
k += ;
for (int i = ; i <= n; i++) {
dp[i][] = ;
scanf("%d", &l[n-i+]);
}
for (int i = ; i <= n; i++) {
dp[i][] = ;
for (int j = ; j <= k; j++)
dp[i][j] = 0x3f3f3f3f;
}
for (int i = ; i <= n; i++) {
for (int j = ; j <= min(k, i / ); j++) {
dp[i][j] = min(dp[i-][j], dp[i-][j-] + (l[i] - l[i-]) * (l[i] - l[i-]));
}
}
printf("%d\n", dp[n][k]);
}
return ;
}

SOJ 1685:chopsticks(dp)的更多相关文章

  1. uva 10271 Chopsticks(dp)

    题目连接:10271 - Chopsticks 题目大意:给出m和n, 然后给出n根筷子从小到大给出, 现在要从这n根筷子中选出m + 8组筷子, 每组筷子包括三根, 现在要求所有m + 8组每组筷子 ...

  2. hdu 1500 Chopsticks DP

    题目链接:HDU - 1500 In China, people use a pair of chopsticks to get food on the table, but Mr. L is a b ...

  3. 算法入门经典大赛 Dynamic Programming

    111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence ...

  4. soj 1700 ping_简单dp

    题目链接 题意:给你一个无向图,求n边的最短路 思路:用最短路想了半天都没想出来,比赛结束回去看看原来用dp做,我的dp有待提高啊 sp[i][k]=min(sp[j][k-1]+dp[j][i])/ ...

  5. UVA-10271 Chopsticks (线性DP)

    题目大意:在n个数中,找出k个三元组(a<=b<=c),求最小的(a-b)*(a-b)之和. 题目分析:将所有数从大到小排序,定义dp(i,j)表示前 i 个数中找出 j 个三元组时的最小 ...

  6. 【洛谷1685】游览 拓扑排序+DP

    题目描述 顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了! 你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开.可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是你还想乘船从桃 ...

  7. Soj题目分类

    -----------------------------最优化问题------------------------------------- ----------------------常规动态规划 ...

  8. ZOJ 1234 Chopsticks

    原题链接 题目大意:有这么一个公式 A,B,C(A<=B<=C), (A-B)^2来衡量这对数字的好坏,值越小越好.现在给出一个数组,要求每三个配对,最后得到的每组值总和最小. 解法:我是 ...

  9. ZOJ 1234 Chopsticks(动态规划)

    Chopsticks 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=234 题目大意:给定n个筷子的长度,取k+8套筷 ...

随机推荐

  1. jupyter运行py文件(py文件和ipynb文件互转)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python  https://i.cnblogs.com/EditPosts.aspx?postid=10750405 一.jup ...

  2. object detection[SSD]

    0. 背景 经过了rcnn,spp,fast rcnn, faster rcnn,yolo,这里又到了ssd模型. faster rcnn的贡献是将候选框区域提取的部分也集成到CNN中去,并且与对象的 ...

  3. SVM-笔记(1)

    1 目的 SVM推导是从讨论最优超平面开始的,即为了得到一个能够划分不同超平面的面,即公式1: \begin{equation}w^Tx+b=0 \tag{1} \end{equation} 这个公式 ...

  4. odoo10学习笔记

    odoo的API: Odoo新API的介绍与应用: odoo新api的实现是借助于python装饰器.新API的装饰器主要有以下几种: model,multi,one,constrains,depen ...

  5. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  6. python 可调用对象之类实例

    可调用对象,即任何可以通过函数操作符()来调用的对象. python可调用对象大致可以分为4类: 1.函数 python中有三种函数:内建函数(BIFs).用户自定义函数(UDF).lambda表达式 ...

  7. Python-待

    内置函数总结 https://www.cnblogs.com/jason-lv/p/8243141.html https://www.cnblogs.com/pyyu/p/6702896.html 数 ...

  8. Rikka with Subset HDU - 6092 (DP+组合数)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  9. YARN的笔记

  10. Python之切片操作

    1.列表list中使用 1.range()生成器 就是list取值的一种方式. 生成器range(),用于写列表的范围,如果只写一个数,就表示从0开始,到写入的值-1: l=list(range(10 ...