(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;
}