该程序过6个点。第三个点正确输出34,该程序输出33.
调试半天仍然无法通过。。。
求各路大牛神牛指点迷津。
(该程序TYVJ 10个点全过AC。)
#include<cstdio>
#include<iostream>
#include<climits>
using namespace std;
int a[11],f[101];
int main()
{
int c=10,n,i,j;
for(i=1;i<=10;i++)
{scanf("%d",&a[i]);
}
scanf("%d",&n);
for(i=1;i<=10;i++)
for(j=1;j<=n;j++)
{
if(f[j]!=0)
f[j]=min(f[j],f[j-i]+a[i]);
else
f[j]=f[j-i]+a[i];
}
printf("%d",f[n]);
// system("pause");
return 0;
}
#include<stdio.h>
#define rep(i,n) for(i=1;i<=n;i++)
#define rep_(j,i) for(j=i-1;j>=0;j--)
int f[210],v[11];
int i,j,n;
inline int min(int a,int b){
return a<b?a:b;
}
int main(){
rep(i,10) scanf("%d",&v[i]);
scanf("%d",&n);
rep(i,n) f[i]=2147483647;f[0]=0;//注意边界问题
rep(i,n) rep_(j,i){
if(i-j>10) break;
else f[i]=min(f[i],f[j]+v[i-j]);}
printf("%d\n",f[n]);
//system("pause");
return 0;
}
我蒟蒻,嗯这题。。。
f[i]表示人乘车到达 i 公里所花的最小费用。
v[i]表示行驶 i 公里的费用,题里已知。。。
我觉得你是边界问题和初始化有点小问题。
#include<stdio.h>
long int i,n,j,m;
long int a[500],f[500];
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
for(i=1;i<=10;i++)
scanf("%ld",&a[i]);
scanf("%ld",&n);
for(i=1;i<=500;i++)
f[i]=10000;
f[0]=0;
f[1]=a[1];
for(i=2;i<=n;i++)
for(j=1;j<=10;j++)
if(i>=j)
f[i]=min(f[i],f[i-j]+a[j]);
printf("%ld",f[n]);
return 0;
}