+ + سوال جالبیه، فکر میکنیم...(مقدار k رو ندادی تو مثالات آخه/)
2015-07-08 10:42:49 -0600 سی پلاس پلاساولین باره که به کاهو میای؟ راهنمای سایت رو حتما بخون!
یافتن کوچکترین پیچ و مهره با مقایسه آنها
آشپزباشی: مرتب کردن پشته با برعکس کردن یک دنباله متوالی از ابتدای آن
دنباله و جادوگر - دوره ی 24 - مرحله ی 2
الگوریتمی برای کمینه کردن تعداد دفعات بازشدن کشوها
الگوریتم محاسبه لگاریتم-سوال مسابقه دانش آموزی صنعتی شریف
ادغام k آرایهی مرتب شده با بهترین زمان اجرا
پیدا کردن مولفه های قویا همبند گراف جهت دار
یافتن کوتاه ترین دور در گراف ساده
در این قسمت میتونی به یک پرسش پاسخ بدی. اگه میخوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخها مفید هستند حتما بهشون رای بده تا پرسشها و پاسخهای خوب مشخص بشن.
توی قسمت پیشنمایش میتونی ببینی متنی که نوشتی چجوری روی سایت دیده میشه.
خیلی مهم: برای اینکه به خط بعد بری باید دوتا Enter بزنی.
میتونی از تگهای معمولی و سادهی html هم استفاده کنی.
با دکمههایی که بالای ویرایشگر قرار دارند کلی کار میشه کرد. از عکسگذاشتن بگیر تا لیست شمارهدار. حتما امتحانشون کن.
برای نوشتن علائم ریاضی میتونی از Mathjax استفاده کنی.
راهنمای Mathjax رو از سایت
math.stackexchange
بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.
فرض کنید یک ساختمان n طبقه داریم. میخوایم بفهمیم بالاترین طبقه ای که تخم مرغ رو بندازیم و نشکنه چنده! برای این کار میتونیم از حداکثر k تخم مرغ استفاده کنیم! کمترین تعداد باری که باید آزمایش کنیم(بندازیم ببینیم شکسته یا نه) چنده؟
شما باید یه الگوریتم بدید که بهترین جوابو بده!
الف) $1 <= k <= n <= 300$
ب) $1 <= k <= n <= 10000$
پ) $1 <= k <= n <= 2000000000$
+ + سوال جالبیه، فکر میکنیم...(مقدار k رو ندادی تو مثالات آخه/)
2015-07-08 10:42:49 -0600 سی پلاس پلاسغلطه کلن گذاشتم این باگو نزنید
مسئله رو یه جور دیگه تبدیل می کنم :(به هر طبقه یه عدد متناظر می کنیم که شمار طبقه است )
فرض کنید یه نباله ای از اعداد 1 تا $n$(به صورت متوالی) داریم که یه عدد توی این دنباله میخوایم پیدا کنیم که همون طبقه جوابه که اینجوری یه باینری سرچ میزنیم آخرشم اگه تخم مرغامون همه (بجز یکی شکست) یکی یکی چک میکنیم که اردر میشه :
دو حالت داره یا $k> log(n)$
که این میشه $ log(n)$
در غیر اینصورت
$order=\frac{n}{2^{k-1}}+(k-1)$
شاید یکم باگ داشته باشه
جواب با توجه به اونی که قبلتر دادم تقریبا واضحه با این وجود توضیح میدم. فرض کنیم حداکثر تعداد طبقاطی که میتونیم حل کنیم با i تخم مرغ و j حرکت برابر باشه با dp_i_j ، حالا آپدیتش واضحه دیگه؛ تخم مرغ رو از جایی میندازیم که در صورت شکستنش ، تعداد طبقات مشکوک رو با یک تخم مرغ کمتر و یک انداختن کمتر حل کنیم ، پس dp_i_j میشه:
for(k = 1,k < j) dp_i-1_k +1
یک مثال هم میزنم ، مثلا فرض کنیم 3 تا تخم مرغ و 5 تا حرکت داریم ؛ اولی رو از جایگاه 11 میندازیم ، اگه شکست که 10 تا خونه رو با 2 تخم مرغ و 4 حرکت میتونیم اگر نشکست هم میریم از طبقه 18 میندازیم اگر شکست 6 خونه رو میتونیم با 2 تخم مرغ و 3 حرکت بزنیم و . . . در نهایت میشه 25.
این بنده خدا تعریف داینامیکش خوبه آبدیتش ( کیبورد عربیه دیگه !) معلوم نیس چیه
2015-07-08 12:47:37 -0600 امیرکسریببین دوست بی حوصله ی عزیز. مگه dpi,j=dpi-1,j-1 + dpi,j-1 نیس ؟؟!! این چیزایی که گفتی الان چیه : پس dp_i_j میشه جمع دی پی های با یک تخم مرغ کمتر و k حرکت به ازای k های از 1 تا j-1 به اضافه j.
2015-07-08 13:01:38 -0600 امیرکسریقسمت الف: میشه با یه ایده داینامیک دو بعدی دیگه هم (متفاوت با چیزی که توی نظرات مطرح شد) حلش کرد :
dp[i][j] = min (d[k-1][j-1]) + i/k که i تعداد طبقات و j تعداد تخم مرغ هاست و sqrt(i)<= k <=i
در واقع k به این معنی است که تخم مرغ رو در طبقات k , 2k , 3k , ... می اندازیم. و اول جایی که شکست پس جواب قطعا بین یکی از این ضرایب k هست که باید ادامه گشتن رو با یک تخم مرغ کم تر اونجا ادامه بدیم (که در واقع میشه k-1 طبقه باقی مانده) . پس روی تمام حالات ممکن k چک می کنیم ببنیم کدوم جواب کم تری تولید می کنه. با کمی دقت معلوم میشه که k همیشه بهتره یکی از اعداد بیش تر از جذر تعداد طبقات باشه.
i/k هم به خاطر اینه که در بدترین حالت ممکن تا طبقه i/k بریم (پرتاب انجام بدیم). پس بیش ترین مقدار هزینه ای که در این مرحله میدیم i/k هست.
برای قسمت ب: کدی که من زدم نشون میده که هیچ وقت تعداد تخم مرغ های بیش تر از ریشه سوم n به درد نمی خوره. درواقع جواب همیشه کم تر از ریشه سوم تعداد طبقات خواهد بود. هنوز استدلالی براش ندارم اما اگه درست باشه میشه کد رو بهبود داد و قسمت ب رو هم با همون داینامیک حل کرد و j رو فقط تا ریشه سوم n چک کرد.
ریشه ی سوم رو نمیدونم! ولی معلومه که از لاگ ان تا تخم مرغ بیشتر لازم نداریم!
2015-07-10 07:12:45 -0600 پویان