动态规划值游艇问题

来源:互联网 发布:墙上网络插座怎么接线 编辑:程序博客网 时间:2024/06/11 22:01

计算从游艇出租站i到游艇出租站j所需的最少租金

 

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


int fm(int n,int m)     
{int k,temp=0;
int min=r[n][m];
if(m==n+1){ temp=r[n][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][n]的值,并将两点的最小值存入r[m][n]
{
 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][n] ;
}
 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);
 }

原创粉丝点击