讨论 / 最小乘车费用简单动规的疑惑。
jianle 2011-10-18 00:38:00
点我顶贴 收藏 删除
第169题,最小乘车费用

该程序过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;

}

#1 821153539@2011-10-18 00:30:00
回复 删除
嗯 我的你看看行不行

#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 公里的费用,题里已知。。。

我觉得你是边界问题和初始化有点小问题。

#2 821153539@2011-10-18 00:38:00
回复 删除
我的正推

#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;

}

查看更多回复
提交回复