wyh學長現在手裡有n個物品,這n個物品的重量和價值都告訴你,然後現在讓你從中選取k個,問你在所有可能選取的方案中,最大的單位價值為多少(單位價值為選取的k個物品的總價值和總重量的比值)
輸入第一行乙個整數t(1<=t<=10)
接下來有t組測試資料,對於每組測試資料,第一行輸入兩個數n和k(1<=k<=n<=100000)
接下來有n行,每行兩個是a和b,代表這個物品的重量和價值
對於每組測試資料,輸出對應答案,結果保留兩位小數
1
3 22 2
5 32 1
0.75
對於樣例來說,我們選擇第乙個物品和第三個物品,達到最優目的
咋眼一看(其實看了也很久),以為是揹包(一直往揹包方向上靠)。
但其實這是求乙個最大化的平均值(使用二分法)。
這可能有點難理解。我們不妨把(目標要求的)單位價值設為x,差值為y。
y = 重量 * x - 價值為了保證x最大,我們取y值前k大的(重量,價值)對。
對於每組(重量,價值)對,逐一計算出y值,然後遞增排列,取前k個計算得出(總質量,總價值)。
使用二分尋找出目標x,對應差值y應接近於0:
y = 總重量 * x - 總價值 (y → 0)使用二分縮小x取值範圍,直到滿足規定的最小精度。
#include #include #include #include using namespace std;
struct things ;
double low,mid,high;
bool cmp(things fir, things sec)
int main()
double value, weight, ans;
double res; // 差值
low = 0, high = 1000,ans = 0;
while(high-low > 1e-6)
ans = value / weight;
res = mid * weight - value;
if(res < 0)
low = mid;
else
high = mid;
}//cout << mid << endl;
cout << fixed << setprecision(2) << ans << endl;
}return 0;
}
2023年東北農業大學春季校賽D wyh的迷宮
給你乙個n m的迷宮,這個迷宮中有以下幾個標識 s代表起點 t代表終點 x代表障礙物 代表空地 現在你們涵哥想知道能不能從起點走到終點不碰到障礙物 只能上下左右進行移動,並且不能移動到已經移動過的點 輸入第一行乙個整數t 1 t 10 接下來有t組測試資料,對於每一組測試資料,第一行輸入2個數n和m...
2023年東北農業大學春季校賽 B wyh的矩陣
給你乙個n n矩陣,按照順序填入1到n n的數,例如n 5,該矩陣如下 16 1116212 712172238 1318234 9141924510 152025 1 現在讓你連線相鄰兩條邊的中點,然後只保留他們圍成封閉圖形區域的數字,那麼這個矩陣變為 117 121738 1318239 141...
2023年東北農業大學春季校賽 wyh的吃雞
最近吃雞遊戲非常火,你們wyh學長也在玩這款遊戲,這款遊戲有乙個非常重要的過程,就是要跑到安全區內,否則就會中毒持續消耗血量,我們這個問題簡化如下 假設地圖為n n的乙個圖,圖中有且僅有一塊x的聯通快代表安全區域,有乙個起點s代表縮圈的時候的起點,圖中c代表的是車 保證車的數量小於等於100 標記為...