#2083:简易版之最短距离(水题)

AC代码①:

#include <iostream>
using namespace std;
int a[510];
int cmp(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}
int main()
{
    ios::sync_with_stdio(false);//解放输入效率
    int t, n, i, sum, temp;
    cin >> t;
    while (t--)
    {
        temp = sum = 0;
        cin >> n;
        for (i = 0; i < n; i++)
            cin >> a[i];
        qsort(a, n, sizeof(int), cmp);
        //先计算n/2点为出发点,然后比较n/2 + 1的sum值
        for (i = 0; i < n; i++)
            sum += abs(a[i] - a[n / 2]);
        if (n % 2 == 0)
        {
            for (i = 0; i < n; i++)
                temp += abs(a[i] - a[n / 2 - 1]);
            sum = sum > temp ? temp : sum;
        }
        cout << sum << endl;
    }
    return 0;
}

AC代码②:DP

#include<bits/stdc++.h>
using namespace std;
int v[510];
int dp[510];
int main() {
    ios::sync_with_stdio(false);
    int t, m;
    cin >> t;
    while (t--) {
        memset(dp, 0, sizeof(dp));
        cin >> m;
        for (int i = 0; i < m; ++i)cin >> v[i];
        for (int i = 0; i < m; i++)
            for (int j = 0; j < m; j++)
                dp[i] += abs(v[j] - v[i]);//一定是绝对值啊
        long long  minn = 99999999999;
        for (int i = 0; i < m; ++i)
            minn = minn < dp[i] ? minn : dp[i];
        cout << minn << endl;
    }
    return 0;
}

Ps:DP的时间消耗会更大,因为相对第一种代码还是做了很多无用计算

posted @ 2020-04-28 11:46  RioTian  阅读(126)  评论(0编辑  收藏  举报