最小邻差绝对值求和
-
题目描述:
给定一个二维数组,3行n列,从每一列选择一个数,组成一个一维数组(1*N),对这个数组的邻差绝对值求和,保证这个和最小,输出这个最小的邻差绝对值的和。 -
输入描述:
第一行一个整数,代表n,接下来三行,代表二维数组矩阵
例:
5
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3 -
输出描述: 5
解释: 一维数组选为[5, 7, 5, 4, 4],邻差绝对值为2、2、1、0、0,和为5,所以输出5。
-
代码:
#include <iostream> #include <vector> using namespace std; int amin = INT_MAX; void dfs(vector<vector<int>> nums,int row,int col,int x,int y,int sum); int minAbs(vector<vector<int>> nums,int row,int col) { for(int i = 0;i < row;i++) { dfs(nums,row,col,i,0,0); } return amin; } void dfs(vector<vector<int>> nums,int row,int col,int x,int y,int sum) { if(y == col - 1) { if(amin > sum) { amin = sum; } return; } for(int i = 0;i < row;i++) { int newx = i; int newy = y + 1; if(newy < col) { dfs(nums,row,col,newx,newy,sum + abs(nums[newx][newy] - nums[x][y])); } } } int main() { int row,col; while(cin >> row >> col) { vector<vector<int>> nums(row,vector<int> (col,0)); for(int i = 0;i < row;i++) { for(int j = 0;j < col;j++) { int item; cin >> item; nums[i][j] = item; } } cout << minAbs(nums,row,col) << endl; } } /* 3 5 5 10 5 4 4 1 7 8 4 0 3 4 9 0 3 */