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