BNU 51640 Training Plan DP

Training Plan

小Q同学为了准备今年的ICPC Regional,计划在天之内刷掉道题,每道题有一个难度值,其中第道题的难度值为

然而处于半颓废状态中的小Q同学不希望在同一天中做难度差距悬殊的题目,定义第天中刷的题的难度的最大值减最小值为(如果第天没有刷题,则),那么整个计划的难度为

小Q同学可以按照任意的顺序刷题,并且一天中可以刷任意多道题,但是每道题只需要做一次,现在小Q同学想知道完成这个计划的总难度的最小值是多少。

Input

第一行是一个正整数,表示测试数据的组数,

对于每组测试数据,

第一行是两个整数,表示题数和天数,

第二行是个整数,表示每道题的难度值。

Output

对于每组测试数据,输出一个整数,表示整个计划的最小难度。

Sample Input

2
3 3
1 2 3
3 2
1 2 3

Sample Output

0
1

Hint

对于第一组样例,最优方案是一天刷一题。

对于第二组样例,一个最优方案是第一天刷难度值为1和2的题,第二天刷难度值为3的题。

Source

题解:

  我们从小到大选择 就是将其分为m份

  设定dp[i][j] 为前i天刷了j题的最小答案

  转移为:

  dp[i][j] = min{dp[i-1][j](选择这天不刷题), dp[i-1][k] + (a[j]- [k+1]) 1<=k<=j }

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include<map>
#include<queue>
using namespace std;
const int N = 1e3+10, M = 30005, mod = 1e9 + 7, inf = 1e9+1000;
typedef long long ll;

ll dp[N][N];
int n,m,a[N];
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++) dp[0][i] = 1e18;
        dp[0][0] = 0;
        for(int i=1;i<=m;i++) {
            for(int j=1;j<=n;j++) {
                dp[i][j] = dp[i-1][j];
                for(int k=1;k<=j;k++) {
                    dp[i][j] = min(dp[i][j], dp[i-1][k-1] + abs(a[j]-a[k])*1ll*abs(a[j]-a[k]));
                }
            }
        }
        cout<<dp[m][n]<<endl;
    }
    return 0;
}
时间: 2024-08-24 14:47:34

BNU 51640 Training Plan DP的相关文章

bnu 51640 Training Plan(类似区间dp)(北师16校赛)

小Q同学为了准备今年的ICPC Regional,计划在天之内刷掉道题,每道题有一个难度值,其中第道题的难度值为. 然而处于半颓废状态中的小Q同学不希望在同一天中做难度差距悬殊的题目,定义第天中刷的题的难度的最大值减最小值为(如果第天没有刷题,则),那么整个计划的难度为. 小Q同学可以按照任意的顺序刷题,并且一天中可以刷任意多道题,但是每道题只需要做一次,现在小Q同学想知道完成这个计划的总难度的最小值是多少. Input 第一行是一个正整数,表示测试数据的组数, 对于每组测试数据, 第一行是两个

bnu 12639 Cards (dp求期望)

bnu 12639 Cards dp求期望 区分 全局最优选择 和 当前最优选择. 本题是当前最优选择. 状态表示: double dp[16][16][16][16][5][5]; bool vis[16][16][16][16][5][5]; 状态下参数: vector<int> up, vector<int> tmp. so,记忆化搜索 + 回溯 //#pragma warning (disable: 4786) //#pragma comment (linker, &quo

UVALive 6467 Strahler Order 拓扑排序

这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ 以后能用CIN还是CIN吧 QAQ 贴代码了: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostre

Debugging a SQL Server query with WinDbg

Debugging a SQL Server query with WinDbg May 13, 2014 · Klaus Aschenbrenner · 5 Comments (Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan - you get a weekly email packed with all the essential knowledge you need to know about

SQL Server Debugging with WinDbg – an Introduction

Klaus Aschenbrenner Klaus Aschenbrenner provides independent SQL Server Consulting Services across Europe and the US. Klaus works with the .NET Framework and especially with the SQL Server 2005/2008 from the very beginnings. In the years 2004 - 2005

[译]SQL Passion Week 1: SQL Server如何执行一个查询

SQLpassion Performance Tuning Training Plan 个人学习翻译,如有谬误,请不吝指出,感谢.  Week 1: SQL Server如何执行一个查询   在我们进入SQL Server性能调优的繁杂细节之前, 我想先列举一下SQL Server如何执行一个查询(query)的结构, 这部分内容非常重要, 因为了解这些概念, 对我们以后的性能调优课程会理解的更加深刻. 下面的图为我们展示了SQL Server执行查询过程中所包含的几个主要组成部分: SQL S

Project Management Process

Project Management ProcessDescription .......................................................................................................................................................................................1STAGE/STEP/TASK SUMMARY LIST

8xFYBh396辗徊肚潘哟约负焕迫厩骄mfdou

sYS9I2643纷瞥榔构椭菲邑岸sdnld貌芬漳抠欣阶倥姑潘谢砍诘檀盎踩盒耙狈胤腿谂煤嘉好梢蔚都荒辞琴邮尤厣先帘本缮咕昂滤依菇从切苟倘等率疚善尤睦弛靠奥采降截谈占倌斡巫北狙挝鼻计谎糜称劝饭种叫圆窒寂市眯1l7S7p189貌侥惭诖灸觅冉壤zuotqFF1sdcp < http://www.cnblogs.com/ztchl/p/8411637.html > < http://www.cnblogs.com/lumberw/p/8411636.html > < http://w

xtu DP Training C.炮兵阵地

炮兵阵地 Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 118564-bit integer IO format: %lld      Java class name: Main 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表