关注
// POSIX C
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
// ANSI C
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
// C++ lib
#include <iostream>
#include <limits>
#include <fstream>
#include <vector>
using namespace std;
int main(){
int N;
cin>>N;
if(N == 0){
cout<<0<<endl;
return 0;
}
vector<int> A(N);
vector<int> B(N);
for(int i=0;i<N;++i){
cin>>A[i];
}
for(int i=0;i<N;++i){
cin>>B[i];
}
vector<vector<int> > d(N+1, vector<int>(N+1, 0));
d[0][0] = 0;
for(int i=1;i<=N;++i){
if(i%2 == 0){
int sum = 0;
for(int j=0;j<i;j+=2){
sum += A[j]*A[j+1];
}
d[i][0] = sum;
}else{
d[i][0] = numeric_limits<int>::max();
}
}
for(int i=1;i<=N;++i){
if(i%2 == 0){
int sum = 0;
for(int j=0;j<i;j+=2){
sum += B[j]*B[j+1];
}
d[0][i] = sum;
}else{
d[0][i] = numeric_limits<int>::max();
}
}
d[1][1] = A[0]*B[0];
for(int i=2;i<=N;++i){
if(i%2 == 1){
int min = numeric_limits<int>::max();
if(d[i-1][0]!=numeric_limits<int>::max()){
min = min<(d[i-1][0]+A[i-1]*B[0])?min:(d[i-1][0]+A[i-1]*B[0]);
}
if(d[i-2][1]!=numeric_limits<int>::max()){
min = min<(d[i-2][1]+A[i-1]*A[i-2])?min:(d[i-2][1]+A[i-1]*A[i-2]);
}
d[i][1] = min;
}else{
d[i][1] = numeric_limits<int>::max();
}
}
for(int i=2;i<=N;++i){
if(i%2 == 1){
int min = numeric_limits<int>::max();
if(d[0][i-1]!=numeric_limits<int>::max()){
min = min<(d[0][i-1]+A[0]*B[i-1])?min:(d[0][i-1]+A[0]*B[i-1]);
}
if(d[1][i-2]!=numeric_limits<int>::max()){
min = min<(d[1][i-2]+B[i-1]*B[i-2])?min:(d[1][i-2]+B[i-1]*B[i-2]);
}
d[1][i] = min;
}else{
d[1][i] = numeric_limits<int>::max();
}
}
for(int i=2;i<=N;++i){
for(int j=2;j<=N;++j){
int min = numeric_limits<int>::max();
if(d[i-1][j-1]!=numeric_limits<int>::max()){
min = d[i-1][j-1]+A[i-1]*B[j-1];
}
if(d[i-2][j]!=numeric_limits<int>::max()){
min = min<(d[i-2][j]+A[i-2]*A[i-1])?min:(d[i-2][j]+A[i-2]*A[i-1]);
}
if(d[i][j-2]!=numeric_limits<int>::max()){
min = min<(d[i][j-2]+B[j-2]*B[j-1])?min:(d[i][j-2]+B[j-2]*B[j-1]);
}
d[i][j] = min;
}
}
/*
for(int i=0;i<=N;++i){
for(int j=0;j<=N;++j){
cout<<d[i][j]<<" ";
}
cout<<endl;
}
*/
cout<<d[N][N]<<endl;
return 0;
}
// 你提交试试,个人感觉好难,想了整晚。。。
查看原帖
点赞 6
相关推荐
03-01 02:29
四川大学 Java 点赞 评论 收藏
分享
查看17道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试体验最好和最差的公司 #
7333次浏览 53人参与
# 如何提高实习转正率? #
99801次浏览 583人参与
# 厦门银行科技岗值不值得投 #
17245次浏览 413人参与
# 烂工作和没工作哪个更痛苦? #
7942次浏览 155人参与
# 重来一次,我还会选择这个专业吗 #
444562次浏览 3947人参与
# 给工作过的公司写一条大众点评,你会怎么写? #
3241次浏览 54人参与
# 春招至今,你收到几个面试了? #
16762次浏览 276人参与
# 现在入门AI首先要做什么? #
1649次浏览 51人参与
# AI替代不了什么? #
6863次浏览 104人参与
# 一人分享一个skill #
1318次浏览 38人参与
# 银行笔面经互助 #
190267次浏览 1313人参与
# Agent面试会问什么? #
5674次浏览 141人参与
# 总结:offer选择,我是怎么选的 #
280820次浏览 1552人参与
# 有必要和同事成为好朋友吗? #
43901次浏览 439人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
10845次浏览 56人参与
# 学历VS实习,哪个更重要? #
19292次浏览 258人参与
# 选完offer后,你后悔学本专业吗 #
68015次浏览 267人参与
# 面试线索爆料 #
123866次浏览 689人参与
# 职场吐槽大会 #
345062次浏览 2275人参与
# 如果实习可以转正,你会不会放弃秋招 #
969251次浏览 6875人参与
# 机械人,你的秋招第一份简历被谁挂了 #
261078次浏览 2435人参与