肯定:おそらくタイトルはNiu Keのディスカッションエリアからのものです。タイトルの入力、出力、データ範囲も少し不明です。アイデアを見てください。これらの詳細はQAQには関係ありません。間違いがあれば修正してください。
トピック1(dp)
3行N列の配列を指定して、各列に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
*/
トピック2(フェアリータイトル)
それを行うにはあまりにも悪いです、ここでソリューションを参照してください:https : //www.nowcoder.com/discuss/392070