题目链接

说实话挺喜欢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. Python做windows服务

    Python做windows服务(多进程服务),并结束多进程 Python中_,__,__xx__的区别 在注册MyWinService服务时,再使用 "sc delete 服务器名称&qu ...

  2. ofo C++面试

    面试官不是C++方向,所以上来就是三个算法题. 1. 假设一个男生和他女朋友约吃饭,男生到的时间点是 6 点 到6点半,女生到的时间可能是 6点15到6点30,都是等概率的到达,问男生比女生到的晚的概 ...

  3. Python_迭代器_35

    迭代器 # l = [1,2,3]# 索引# 循环 for# for i in l:# i## for k in dic:# pass #可以被for循环的# list# dic# str# set# ...

  4. hibernate操纵数据库常用方法 及 hibernate对象的三种状态

    在dao层使用hibernate语言来与数据库进行访问,hibernate作为面向对象思想开发的dao层框架其理解也需要以面向对象的思想来看待 使用.hibernate不仅支持使用者使用他提供的对象来 ...

  5. CONTINUE...?模拟分情况

    CONTINUE...? DreamGrid has  classmates numbered from  to . Some of them are boys and the others are ...

  6. 2017湘潭大学邀请赛E题(贪心)

    链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE Partial Sum Input The input contains zero or more t ...

  7. JoinPoint

    “JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象. ” JoinPoint适用于注解和Sc ...

  8. django之全局默认设置查看及admin语言设置

    django之admin语言设置 admin后台管理默认使用的是英文,有时我们需要将其设置成自己的语言以方便使用管理: 将 LANGUAGE_CODE = '' 设置为欲设置的语言即可. 以下为dja ...

  9. BOM、DOM

    window对象 所有浏览器都支持window对象,他表示浏览器窗口. 全局变量是window对象的属性.全局函数是window对象的方法. window的常用方法: window.innerHeig ...

  10. vue-cli脚手架安装和webpack-simple模板项目生成

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. GitHub地址是:https://github.com/vuejs/vue-cli 一. ...