题目
思路 dp
由本题的描述可以得出
要设计两个维度天数和城市的个数
把所经过的城市作为阶段,
再根据本题直白的描述即可得出方程
对于每一天有两种选择 走或不走
如下
f[i][j]=min(f[i][j],f[i-1][j-1]+d[i]*c[j]);
f[i][j]=min(f[i][j],f[i][j-1]);
完整代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int d[1100],c[1100],f[1100][1100];
int main(){
memset(f,0x3f3f,sizeof(f));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
for(int i=1;i<=m;i++)
scanf("%d",&c[i]);
for(int i=0;i<=m;i++) f[0][i]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
f[i][j]=min(f[i][j],f[i-1][j-1]+d[i]*c[j]);
f[i][j]=min(f[i][j],f[i][j-1]);
}
int res=999999999;
for(int i=n;i<=m;i++)
res=min(res,f[n][i]);
cout<<res;
return 0;
}