E寻宝(贪心)

Description

在一维坐标轴上有许多宝藏,总共n种宝藏,每种宝藏有k个。现在共k个人寻宝,k个人初始位置可以位于任意点。但是每人需要按指定顺序捡起宝藏(1->2->3->…->n,先捡第1种,再捡第2种。。。最后捡第n种宝藏,每种宝藏捡起一个)。每个人要捡起n个宝藏。现在你自己规划好k个人的初始位置与寻宝路线(一个宝藏只能被一个人捡起),求k个人所走路程的和最短是多少。

Input

第一行两个整数:n,k接下来n行,每行k个整数x,表示宝藏在一维坐标轴上的位置。

(1<=n<=100)

(1<=k<=8)

(-1000,000,000<=x<=1000,000,000)

Output

输出一个数最短的距离和

Sample Input 1

2 3
-1 1 3
-2 2 4
Sample Output 1

3
Hint

样例解释:

第一个人:从-1到-2

第二个人:从1到2

第三个人:从3到4

Source

2019年集训队选拔赛

思路:贪心,待补

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define ll long long
ll n,m,b[1000][1000]={0};
using namespace std;
int main(){
	while (~scanf("%lld%lld",&n,&m)){
		for (ll i=0;i<n;i++){
			for (ll j=0;j<m;j++){
				scanf("%lld",&b[i][j]);
			}
			sort(b[i],b[i]+m);

		}
		ll ans=0;
		for (ll i=1;i<n;i++){
			for (ll j=0;j<m;j++){
				ans+=abs(b[i][j]-b[i-1][j]);
			}
		}

		printf("%lld
",ans);
	}
	return 0;
}

原文地址:https://www.cnblogs.com/tomjobs/p/10617586.html