zoukankan      html  css  js  c++  java
  • 搬寝室(动态规划)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define MAX 0x3f3f3f3f
    using namespace std;
    int dp[2500][1500],Goods[2500];
    int main()
    {
    int N,M;
    while(~scanf("%d%d",&N,&M))
    {
    memset(Goods,0,sizeof(Goods));//每组数据重新置为零
    for(int i=0; i<=N; i++)
    for(int j=1; j<=M; j++)
    dp[i][j]=MAX;//因为是求最小的疲劳度,有些数据用不到,所以将所有的数据先设为最大值
    dp[0][0]=0;
    for(int i=1; i<=N; i++)
    scanf("%d",&Goods[i]);
    sort(Goods,Goods+N+1);//按货物的重量排序,这样相邻的差值最小,
    for(int i=2; i<=N; i++)
    for(int j=1; 2*j<=i; j++)
    dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(Goods[i]-Goods[i-1])*(Goods[i]-Goods[i-1]));/*每次增加一个物品时,这个物品都有两种状态,取或不取,如果不去,则和在(i-1)个物品中选取j对是一样的,如果第i个物品去了,那么第(i-1)个物品一定要取,因为他们是相邻的,因为相邻的差值最小嘛,此时相当于在(i-2)个物品中取(j-1)对再加上最后一对;*/
    printf("%d ",dp[N][M]);

    }

    return 0;
    }

    梦里不知身是客,一晌贪欢。
  • 相关阅读:
    tp框架自带扩展分页类修改样式
    win7获取管理员权限
    Git学习手记(二)
    安卓导出安装包
    浅谈存储过程
    Java宝典
    单例设计模式
    关于Cookie的有关内容
    开辟html5和css3学习随笔(2015-3-2)
    关于面试题
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/4969447.html
Copyright © 2011-2022 走看看