(dp_{i,j}表示第i天到达第j个城市)
反正是线性的,那么要不是早就到了j在那休息,要不就是上一天从上一座城市过来
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int d[1001],c[1001];
int n,m;
int dp[1001][1001];
int znx=0x7ffffff;
int main(){
scanf("%d%d",&n,&m);
memset(dp,0x7f,sizeof(dp));
for(int i=1;i<=n;++i){
scanf("%d",&d[i]);
}
for(int i=1;i<=m;++i){
scanf("%d",&c[i]);
}
dp[0][0]=0;
int maxn=dp[1][1];
for(int i=1;i<=m;++i){
int Ai=min(i,n);
for(int j=0;j<=n;++j){
if(j==0) dp[i][j]=0;
else if(j==i) dp[i][j]=dp[i-1][j-1]+d[j]*c[i];
else dp[i][j]=min(dp[i-1][j-1]+d[j]*c[i],dp[i-1][j]);
}
}
cout<<dp[m][n];
return 0;
}