您的位置:首页 > 其它

动态规划值游艇问题

2009-12-06 00:36 337 查看
计算从游艇出租站i到游艇出租站j所需的最少租金

#include<stdio.h>
int r[10][10]; //存放两个出租战之间的价格

int fm(int n,int m)
{int k,temp=0;
int min=r
[m];
if(m==n+1){ temp=r
[m];return temp;} //如果相邻,直接返回两点间的价格
for(k=n+1;k<m;k++) //不相邻,则递归计算两点之间所有可能的价格
{temp=fm(n,k)+fm(k,m);
if(temp<min)
min=temp; //将最小值存放在min中
}
return min;
}

int cal(int m,int n ) //cal函数功能和fm函数相同 它会修改r[m]
的值,并将两点的最小值存入r[m]

{
int i , j , k ;
for( k = 2 ; k < n ; k ++)
{for(i = m ; i <= n-k ; i ++)
{ j = i + k ;
for(int p = i+1 ; p <= j ; p ++ )
{int temp = r[i][p] + r[p][j] ;
if(r[i][j] > temp )
r[i][j] = temp ;
}
}
}
return r[m]
;
}
void main()
{int n,m,i,j;
printf("input n to m:");

while(1)
{scanf("%d,%d",&n,&m);
if(n>=m)
printf("error/ninput n to m:");
else
break;}

for(i=n;i<m;i++)
for(j=i+1;j<=m;j++)
{printf("%d到%d price",i,j);
scanf("%d",&r[i][j]);
}
printf("%d/n",fm(n,m));
int b=cal(n,m);
printf("%d/n",b);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: