阿里春招笔试2020.3.25(dp/神仙题)

申明:大概题意是从牛客网讨论区嫖的,题目的输入、输出以及数据数据范围也有些不知,大家看看思路就好,这些细节就不管了QAQ。有错欢迎纠正~

3.25

题目一(dp)

给定一个3行N列的数组,每1列选1个数,求所有相邻列的差的绝对值的和最小值
思路:dp

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 100010;


int n;
int dp[2][3];
int a[maxn][3];

int main() {
	scanf("%d",&n);
	for(int k = 0;k < 3;++k) {
		for(int i = 0;i < n;++i) {
			scanf("%d",&a[i][k]);
		}
	}
	if(n == 1) {
		printf("0\n");
		return 0;
	}
	int pre = 0,cur = 1;
	for(int i = 1;i < n;++i) {
		for(int j = 0;j < 3;++j) {
			dp[cur][j] = INT_MAX;
			for(int k = 0;k < 3;++k) {
				dp[cur][j] = min(dp[cur][j],dp[pre][k]+abs(a[i][j]-a[i-1][k]));
			}	
		}
		for(int j = 0;j < 3;++j) printf("%d ",dp[cur][j]);printf("\n");
		swap(cur,pre);
	}
	int ans = INT_MAX;
	for(int i = 0;i < 3;++i) 
		ans = min(ans,dp[pre][i]);
	printf("%d\n",ans); 
}
/*
5
5 10 5 4 4 
1  7  8 4 0 
3  4  9 0 3 

3
*/

题目二(神仙题)

太菜了做不来,题解看这:https://www.nowcoder.com/discuss/392070

发布了152 篇原创文章 · 获赞 2 · 访问量 6443

猜你喜欢

转载自blog.csdn.net/weixin_43918473/article/details/105274390
今日推荐