程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2078

hdu 2078

編輯:C++入門知識

 


這題我一看就想到了DP,然後也按著DP做了,然後一次就AC了

但是,我從網上找了下別人的思路,又有種想哭的感覺

別人只是找到最小的算一下平方差,就過了,仔細考慮了一下,也對

兩個數的平方差>與中間任意幾個數的平方差的和

在此我是不是應該反思一下,我的DP代碼是否是真的對了呢

 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int i,cas,n,m,ans;
    int a[45];
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        sort(a,a+n);
        ans=(100-a[0])*(100-a[0]);
        printf("%d\n",ans);
    }
    return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
bool cmp(const int &a,const int &b)
{
    return a>b?1:0;
}
int main()
{
    int i,j,cas,n,m,ans;
    int dp[45][105],a[45][45],c[45];
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d%d",&n,&m);
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(i=1;i<=n;i++)
        scanf("%d",&c[i]);
        sort(c+1,c+n+1,cmp);
        c[0]=100;
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=i;j++)
            {
                a[i][j]=(c[i]-c[j])*(c[i]-c[j]);
            }
        }
    //    printf("%d %d %d\n",a[1][0],a[2][0],a[0][0]);
        ans=0;
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(i==1) dp[i][j]=a[j][0];
                else
                dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a[j][j-1]);
                ans=max(ans,dp[i][j]);
            }
        }
        printf("%d\n",ans);

    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved