アリババの筆記試験2020.3.25(dp /妖精の質問)

肯定:おそらくタイトルはNiu Keのディスカッションエリアからのものです。タイトルの入力、出力、データ範囲も少し不明です。アイデアを見てください。これらの詳細はQAQには関係ありません。間違いがあれば修正してください。

3.25

トピック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

元の記事を152件公開 賞賛2 訪問6443

おすすめ

転載: blog.csdn.net/weixin_43918473/article/details/105274390