充滿思維含量的DP 選美

2022-03-27 08:11:01 字數 1150 閱讀 3018

時間限制: 1 sec  記憶體限制: 256 mb

【題目描述】

一年一度的星哥選美又拉開了帷幕

a (h− h) +b(w− w) ≤ c

其中h和w為這個人的相貌和身材, h和w為選中者中的最小相貌引數和最小身材引數,而a、 b、 c為三個不大於10000 的正的整型常數。

現在請計算星哥最多可以選中多少人。

【輸入格式】

第一行:乙個整數: n(0第二行:三個分開的整數: a,b和c

第三行到第n+ 2行:每行有兩個用空格分開的整數,分別表示乙個人的相貌引數和身材引數

【輸出格式】

第一行:最多被選的人數

【輸入樣例】

1 2 4

5 13 2

2 32 1

7 26 4

5 14 3

【輸出樣例】

其實也不全是dp,這裡用到了乙個數學的推導,實際就是個zz的不等式,

首先,固定乙個h,而式子中a*(h-h)+b*(w-w)<=c ----->  b*w>=a*h+b*w-c-a*h

明顯w對於乙個固定的人,有唯一的範圍   (a*h+b*w-c-a*h)/b~w,每個人對應選這個h有一段w的範圍,

因此對每個h就有選任乙個w時能滿足多少人,這樣就是乙個n^2加一點常數的效率,成功改良了n^3的暴力。。。

最終,對每個h,w選最大就行了。細節:h比h小的continue,可以考慮離散一下。

#include#include#include#include#include#includeusing namespace std;

int read()

while(x>='0'&&x<='9')

return sum*f;

}struct peo

a[2005];

int n,ans=0,a,b,c,ha[2005],hb[2005],sza,szb,v[2005];

void init()

int main()

init();

for(int i=1;i<=sza;i++)

{ int sum=0,t=ha[i]*a;

memset(v,0,sizeof(v));

for(int j=1;j<=n;j++)

{if(a[j].a

思維轉換,充滿好奇

我希望我們學習的核心驅動力是那顆對未知事物的好奇心。求索,這是每乙個學生的本職任務,是當今社會我們每個人從孩提時代就開始的主動或被動的嘗試。記得小時候,想吃花生,但是還太小手沒有足夠的力氣將花生皮撥開,於是思前想後用腳將它踩開了。這就是換一種角度思考問題的結果,在這個例子中它幫我們完成了用尋常方式只...

強盜分贓 充滿 逆向思維「的故事

從前有五個強盜搶得了100枚金幣,但在分贓這100枚金幣上的問題爭吵不休,最後他們決定進行民主分配 首先由5個人進行抽籤選舉,抽籤獲得每個人的號碼,然後由抽到1號的人提出分配方案,然後進行大眾投票,如果超過半數人投反對票,則把1號丟進大海喂鯊魚,然後由2號提供分配方案,當2號的分配方案也達成超過半數...

小D的劇場(思維dp)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 若你摘得小的星星 你將得到小的幸福 若你摘得大的星星 你將得到大的財富 若兩者都能摘得 你將得到永遠的願望 摘星是罪孽的寬恕 摘星是夜晚的奇蹟 抓住它吧 你所期望的...