本题大意是说,已知坐一到十站的花费,求坐到第n站最少的代价
首先,对于这种纯dp题,首先想到转移方程,第i站的价格应该为第i-1、2……10站坐1、2……10站的最小值
因此,可以轻易得到:f[i]=min(f[i-j]+a[j]);
直接上代码:
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7F7F7F7F;
int a[11];
int f[100000];
int aim,i=0;
int main()
{
memset(f,INF,sizeof(f));
f[0]=0;
for(int i=1;i<=10;i++)
cin >> a[i];
cin >> aim;
while(i<aim){
for(int j=1;j<=10;j++)
f[i+j]=min(f[i+j],f[i]+a[j]);
i++;
}
cout << f[aim] << endl;
return 0;
}
ps:由于作者是一名资深蒟蒻,有错误也是不可避免的事,所以欢迎大家指出错误,我也会改正的,谢谢。