新手守护
有谁能提供这道题的思路?
刘小禾在2020-08-08 16:36:24追加了内容
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cmath>
#include <list>
using namespace std;
int a[700],f[700];
int main(){
//freopen("math.in","r",stdin);
//freopen("math.out","w",stdout);
int n;
for(int i=1;i<=10;i++){
cin>>a[i];
}
cin>>n;
f[1]=a[1];
for(int i=1;i<=n;i++){
int minn=1010;
if(i<=10){
for(int j=i-1;j>=1;j--){
minn=min(minn,f[j]+f[i-j]);
}
minn=min(minn,a[i]);
}
else{
for(int j=i-1;j>=i-10;j--){
minn=min(minn,f[j]+f[i-j]);
}
}
f[i]=minn;
}
cout<<f[n];
//fclose(stdin);
//fclose(stdout);
return 0;
}
刘小禾在2020-08-08 16:38:50追加了内容
40分
新手天翼
高级守护
核心代码:
f[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=min(i,10);j++){//枚举相距的距离j
f[i]=min(f[i],f[i-j]+a[j]);
}
} cout<<f[n];