2023年東北農業大學春季校賽 I wyh的物品

2021-08-18 11:08:15 字數 1328 閱讀 8174

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 標記為...