題目連結: 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;
}