時間限制: 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 若你摘得小的星星 你將得到小的幸福 若你摘得大的星星 你將得到大的財富 若兩者都能摘得 你將得到永遠的願望 摘星是罪孽的寬恕 摘星是夜晚的奇蹟 抓住它吧 你所期望的...