close

題目連結:   https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=8030

題目大意:  找出學術成果最大,並且記錄期刊數量,剩餘心力。

思路:  因為期刊總類固定3個。所以可以直接枚舉3種期刊數,並記錄最大學術成果,時間複雜度O(N^3),取N=100。

其實這題測資有點水,其實判斷只要學術成果最大並且不超過心力就好了,他題目輸出的一堆判斷可以都不用。不過這個解法後面題目過不了。

代碼:  

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int w, p;
    double w1, w2, w3, p1, p2, p3;
    while(cin >> w >> p >> w1 >> w2 >> w3 >> p1 >> p2 >> p3){
        int a = 0, b = 0, c = 0;
        double mx_p = 0.0;
        for(int i = 0; i <= 100; ++i){
            for(int j = 0; j <= 100; ++j){
                for(int k = 0; k <= 100; ++k){
                    double gain = (double)i*p1 + (double)j*p2 + (double)k*p3;
                    double wt = (double)i*w1 + (double)j*w2 + (double)k*w3;
                    if(wt <= w && gain >= p){
                        if(gain > mx_p){
                            mx_p = gain;
                            a = i, b = j, c = k;
                        }
                    }
                }
            }
        }
        double rest = w - (a*w1+b*w2+c*w3);
        if(!(a+b+c)) puts("0");
        else
            printf("%d %d %d %.3f %.3f\n", a, b, c, mx_p, rest);
    }
    return 0;
}

arrow
arrow
    創作者介紹
    創作者 尾玉 的頭像
    尾玉

    louisfghbvc的部落格

    尾玉 發表在 痞客邦 留言(0) 人氣()