zoukankan      html  css  js  c++  java
  • hdu1227Fast Food

    不知道错在哪里

    #include "iostream"
    #include "string.h"
    #include "algorithm"
    #define INF 0x3fffffff;
    using namespace std;
    int min(int a,int b){return a>b?b:a;}
    int main(){
      int n,m,i,num[110],sum[110][110],j,dp[110][110],k,top=1;
      while(cin>>n>>m){
        if(!n&&!m)break;
        memset(dp,0,sizeof(dp));
        memset(sum,0,sizeof(sum));
        for(i=1;i<=n;i++)cin>>num[i];
        sort(num+1,num+n+1);
    
        for(i=1;i<n;i++){
          for(j=i+1;j<=n;j++){
            sum[i][j]=sum[i][j-1]+num[j]-num[(i+j)/2];
          }
        }
        for(i=1;i<=n;i++)dp[i][1]=sum[1][i];
        for(i=2;i<=m;i++){
          for(j=i;j<=n;j++){
            dp[j][i]=INF;
            for(k=i-1;k<j;k++){
              dp[j][i]=min(dp[j][i],dp[k][i-1]+sum[k+1][j]);
              //cout<<"i "<<i<<" k "<<k<<" j "<<j<<' '<<dp[k][i-1]<<' '<<sum[k+1][j]<<endl;
            }
          }
          //for(j=1;j<=n;j++)cout<<dp[j][i]<<' ';cout<<endl;
        }
        cout<<"Chain "<<top++<<endl;
        cout<<"Total distance sum = "<<dp[n][m]<<endl<<endl;
      }
      return 0;
    }

    网上的答案

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int maxn=225;
    const int oo=0x3fffffff;
    int dp[maxn][maxn], cost[maxn][maxn];
    int a[maxn];
    
    int main()
    {
        int n, K, tcase=0;
        while(cin >> n >> K,n+K)
        {
            memset(cost,0,sizeof(cost));
            for(int i=1; i<=n; i++) scanf("%d",a+i);
            sort(a+1,a+n+1);
            for(int i=1; i<=n; i++)
                for(int j=1; j<=i; j++)
                    for(int k=j; k<=i; k++)
                         cost[j][i]+=abs(a[k]-a[(i+j)/2]);
            for(int i=1; i<=n; i++)
                for(int j=1; j<=K; j++) dp[i][j]=oo;
            for(int i=1; i<=n; i++) dp[i][1]=cost[1][i];
            for(int k=2; k<=K; k++)
                for(int i=k; i<=n; i++)
                    for(int j=k-1; j<i; j++)
                         dp[i][k]=min(dp[i][k],dp[j][k-1]+cost[j+1][i]);
            printf("Chain %d
    Total distance sum = %d
    
    ",++tcase,dp[n][K]);
        }
        return 0;
    }
  • 相关阅读:
    MFC
    AC自动机
    KMP
    Power Transmission (Hard Edition)
    Floyd
    地杰斯特算法
    二叉树
    51nod 1002 数塔取数问题【dp】
    51nod1049 最大子段和【动态规划】
    poj2385
  • 原文地址:https://www.cnblogs.com/dowson/p/3286083.html
Copyright © 2011-2022 走看看