hdu 1421 简单dp

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>
#include <stack>
#include <set>
#include <map>
#include <vector>

using namespace std;
#define INF 0x2fffffff
#define LL long long
#define MAX(a,b) ((a)>(b))?(a):(b)
#define MIN(a,b) ((a)<(b))?(a):(b)
int a[2005];
int dp[2005][10005];

int main(){
    int n,m;
    while(cin >> n >> m){

        for(int i = 1;i <= n;i++){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+n+1);

        for(int i = 0;i <= m;i++){
            dp[0][i] = INF;
            dp[1][i] = INF;
        }
        for(int i = 0;i <= n;i++){
            dp[i][0] = 0;
        }
        for(int i = 2;i <= n;i++){
            for(int j = 1;j <= m;j++){
                if(i < 2*j){
                    dp[i][j] = INF;
                }
                else{
                    dp[i][j] = min(dp[i-2][j-1]+(a[i-1]-a[i])*(a[i-1]-a[i]),dp[i-1][j]);
                }
            }
        }
        printf("%d\n",dp[n][m]);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 09:07:09

hdu 1421 简单dp的相关文章

hdu 1087 简单dp

思路和2391一样的.. <span style="font-size:24px;">#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int inf=(0x7f7f7f7f); int main() { int a; int s[10005]; int w[10005];

HDU 4826 简单DP

Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身上最多有多少金币? Input 输入的第一行是一个整数T(T < 200),表示共有T组数据.每组数据的

hdu 1257 &amp;&amp; hdu 1789(简单DP或贪心)

第一题;http://acm.hdu.edu.cn/showproblem.php?pid=1257 贪心与dp傻傻分不清楚,把每一个系统的最小值存起来比较 1 #include<cstdio> 2 using namespace std; 3 int a[30001],b[30001]; 4 int main() 5 { 6 int n,i,j; 7 while (~scanf("%d",&n)) 8 { 9 int ans=0; 10 b[0]=-1; 11 f

HDU 1708 简单dp问题 Fibonacci String

Fibonacci String Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4568    Accepted Submission(s): 1540 Problem Description After little Jim learned Fibonacci Number in the class , he was very int

免费馅饼 (hdu 1176 简单DP)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28519    Accepted Submission(s): 9737 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的1

Max Sum (hdu 1003 简单DP水过)

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 161294    Accepted Submission(s): 37775 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max s

hdu 4502简单dp题

dp[i] 表示第i天能赚得的最大工资 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; struct node { int star,end,cost; }A[1100]; int max(int a,int b) { return a>b?a:b; } int cmp(node a,node b) { re

Tickets HDU - 1260 简单dp

#include<iostream> using namespace std; const int N=1e5; int T,n; int a[N],b[N]; int dp[N]; int main() { cin>>T; while(T--) { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n-1;i++) cin>>b[i]; dp[1]=a[1]; for(i

hdu 1421 经典dp

很显然,将物品按照重量排序后,如果要搬某一对物品,则这两件物品一定是相邻的. 于是排序后依次考虑第i件物品放或者不放,即得到状态转移方程: f[i][j] = min( f( i - 1, j ), f( i - 2, j - 1 ) + d[i] ); 其中,d[i]表示第i件物品和第i-1件物品这一对产生的疲劳度. 1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio> 4 using name