装船问题

    xiaoxiao2021-04-13  44

    装船问题 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description

    王小二毕业后从事船运规划工作,吉祥号货轮的最大载重量为M吨,有10种货物可以装船。第i种货物有wi吨,总价值是pi。王小二的任务是从10种货物中挑选若干吨上船,在满足货物总重量小于等于M的前提下,运走的货物的价重比最大。 Input

    输入数据的第一行有一个正整数M(0 < M < 10000),表示所有货物最大载重量。在接下来的10行中,每行有若干个数(中间用空格分开),第i行表示的是第i种货物的货物的总价值pi ,总重量wi。(pi是wi的整数倍,0 < pi , wi < 1000) Output

    输出一个整数,表示可以得到的最大价值。 Example Input

    100 10 10 20 10 30 10 40 10 50 10 60 10 70 10 80 10 90 10 100 10 Example Output

    550 Hint

    价重比:计算其价值与重量之比 Author 代码实现:

    #include <stdio.h> #include <stdlib.h> #include <string.h> struct node { int p;//货物价值 int w;//货物重量 }t[13], temp; int main() { int a,i, j; scanf("%d", &a); for(i=0;i<10;i++) { scanf("%d %d", &t[i].p, &t[i].w); } for(i=0;i<10-1;i++)//冒泡排序价值与重量之比从大到小 { for(j=0;j<10-1-i;j++) { if(t[j].p/t[j].w<t[j+1].p/t[j+1].w) { temp = t[j], t[j] = t[j+1], t[j+1] = temp; } } } int sum = 0;//可得到的最大价值 for(i=0;i<10;i++) { if(a>=t[i].w)//这类货物全部装满 { a -= t[i].w; sum += t[i].p; } else { sum += (t[i].p/t[i].w) * a;//只装一部分 break; } } printf("%d\n", sum); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-668693.html

    最新回复(0)