想问一下大家,这类实际问题怎样用c语言实现。一个人带45个学生租船,大船可栽6人,每个24元,小船栽4人,每个20元。求出最省钱的租法 。

(1)、一个人带45个学生租船,大船可栽6人,每个24元,小船栽4人,每个20元。求出最省钱的租法 。
(2)、有一项工程,甲完成需要a天,乙需要b天,丙需要n天,丁需要s天(s<=50)他们四个人合起来,一天可以完成这个工程,四个数(a≤b≤n≤s)都是自然数,写程序求这几个数

代码如下:

#include <stdio.h>
int main()
{
    int dc = 0,xc = 0;
    int fy = 1000000;
    int n1,n2; //记录费用最少时的船数
    int t,s;
    for (dc=0;dc<=8;dc++)
    {
        for (xc=0;xc<=12;xc++)
        {
            s = dc*6+xc*4; //可以乘坐的人数
            if ( s>=46) //46个人
            {
                t = dc*24+xc*20; //费用
                //printf("%d %d %d\n",dc,xc,fy);
                if(t < fy)
                {
                    fy = t;
                    n1 = dc;
                    n2 = xc;
                }
            }
        }
    }
    printf("大船%d,小船%d,费用%d",n1,n2,fy);
    return 0;
}

设函数为 y = 24a + 20b (6a+4b >= 45)
动态规划做。

#include <stdio.h>
int main(){
 int a = 8;
 int b = 0;
 int min = 1000;
 for(int i=8;i>= 0;i--){
     for(int j=0;j<12;j++){
         if(6*i+4*j>=45){
            printf("a=%d,b=%d,y=%d\n",i,j, 24*i+20*j);
            if(min > 24*i+20*j){
                min = 24*i+20*j;
                a = i;
                b = j;
            }
         }
     }
 }
printf("最小策略:a=%d,b=%d,y=%d\n",a,b, min);
 return 0;
}