یه چیز پیشنهاد بدین بذارم اینجا

نوشته های من در مورد برنامه نویسی، غیر از برنامه نویسی و چیز‌های دیگه...

یه چیز پیشنهاد بدین بذارم اینجا

نوشته های من در مورد برنامه نویسی، غیر از برنامه نویسی و چیز‌های دیگه...

n خان رستم

پنجشنبه, ۳۰ آذر ۱۳۹۱، ۱۱:۲۵ ب.ظ

سلام، این سوال رو فعلن داشته باشید، بعدن راه حل و توضیحات رو اضافه می‌کنم. :)

رستم می‌خواد «n-خان رستم» رو پشت سر بذاره تا برای خودش اسطوره‌ای بشه. برای این کار باید به ترتیب خان یکم تا خان n-ام رو پشت سر بذاره. در خان i-ام باید از پس اژدهای i-ام بر بیاد. قدرت اژدهای i رو با pi نشون می‌دیم. قدرت هر اژدها یه عدد صحیح مثبته. رستم تو خان i می‌تونه به اژدها مقدار ci تومن رشوه بده و اینطوری اون اژدها همدست رستم می‌شه و دیگه باهاش نمی‌جنگه. اژدها‌ها زیاد دنبال پول نیستن، در نتیجه هر اژدها یا ۱ تومن یا ۲ تومن رشوه می‌خواد. اگه رستم به اژدهای i-ام رشوه نده اون موقع باید با اون اژدها بجنگه. اژدها در صورتی تو مبارزه با رستم و همدستاش پیروز می‌شه که قدرتش از مجموع قدرت اژدها‌های همدست رستم بیشتر باشه. قدرت خود رستم تاثیری تو مبارزه نداره. حالا رستم می‌خواد با کمترین هزینه n-خان رستم رو پشت سر بذاره. الگوریتمی از O(n۲ بدید که کمترین هزینه‌ای که رستم باید از جیبش بده رو حساب کنه. واضحه که رستم باید حتمن به اژدهای خان یکم رشوه بده،‌ چون در ابتدا قدرتی نداره.

به روز رسانی: راه حل و توضیحات اضافه شد. (۱۸ دی ۹۱) (۹ دی ۹۱)

راه حل

در ادامه راه حلی از این سوال رو با استفاده از برنامه‌نویسی پویا (داینامیک) توضیح می‌دم. مقدار dp[i][c] رو برابر با بیشترین قدرت ممکن همدست‌های رستم در نظر بگیرید در صورتی که می‌تونه i تا اژدهای اول رو با خرج کردن حداکثر c تومن پول، پشت سر بذاره. در غیر این صورت مقدار dp[i][c] برابر با خواهد بود. برای به دست آوردن مقدار dp[i][c] باید دو تا حالت رو در نظر بگیریم. حالت اول وقتی هست که به اژدهای i رشوه نداده باشیم و با اون جنگیده باشیم. شرط وجود داشتن چنین حالتی اینه که pi ≤ dp[i-۱][c]. زیرا باید حداقل قدرت برای شکست دادن اژدهای i ام رو تا قبل از این کسب کرده باشیم. حالت بعدی هم وقتی هست که به اژدهای i‌ رشوه بدیم و همدستمون بشه. شرط وجود داشتن این حالت اینه که dp[i-۱][c-ci] برابر با نباشه. در حالت اول بیشینه‌ی قدرت همدست‌های رستم برابر با dp[i-۱][c] هست و در حالت دوم این مقدار برابر با dp[i-۱][c-ci]+pi است و در صورتی که هیچ کدام از این دو حالت قابل دسترسی نباشند می‌شود.

در انتها باید کمترین x رو پیدا کنیم که dp[n][x] برابر با نباشه.

توضیحات

توضیح خاصی که نیست. این سوال مال کانتست اخیر Topcoder‌ بود و بر خلاف اکثر شرکت کننده‌ها که سوال رو خیلی سریع حل کردن شرکت کننده‌های ایرانی (از جمله خودم) تقریبن همه‌شون توی این سوال به کندی عمل کردن و امتیاز‌های خیلی پایینی کسب کردن. طبق چیزایی که می‌دونم ضعف ایرانی‌ها تو این سوال و احتمالن سوال‌های مشابهش ریشه در نوع تغذیه‌ی افراد در این منطقه و آب و هوای ایران نداره. به هر حال هنوز دلیلی واسه این عملکرد ضعیف نمی‌بینم!

توضیحات بیشتر

راه حلی که اول کار به ذهن همه می‌رسه اینه که dp[i][p] رو برابر با کمترین هزینه لازم بگیریم طوری که i‌ اژدهای اول رو پشت سر بذاریم و قدرت همدستامون p باشه. ولی چنین state‌هایی برای داینامیکمون نمی‌تونیم بگیریم چون محدودیتی بر روی قدرت اژدها‌ها نیست. ایده‌ای که توی چند تا سوال تا حالا دیدم اینه که وقتی داینامیکی داریم که یکی از پارامتر‌هاش حالت‌های زیادی داره ولی جوابش حالت‌های کمی داره در عوض می‌شه بعضی وقت‌ها بیشینه یا کمینه‌ی اون پارامتر رو برای هر جواب خاص به دست بیاریم. یا به عبارتی جای پارامتر و جواب رو توی داینامیکمون عوض کنیم تا تعداد state‌ها کمتر بشه. دو تا سوال که الآن توی ذهنم هستن و از این ایده می‌شه روشون زد اینا اند:

  • پنجشنبه, ۳۰ آذر ۱۳۹۱، ۱۱:۲۵ ب.ظ
  • سید حامد ولی زاده

نظرات  (۵۱)

لطفا نوع فرمت ورودی هم بدید که کدمون رو براتون بفرستیم
پاسخ:
هدفم بیشتر راه تئوری سوال هست. حالا چند روز دیگه میام راه سوال رو می‌نویسم با یک سری توضیح در مورد ایدش. یه دو تا سوال مشابه واسه این ایده می‌ذارم تا اگه خواستید کد بزنید اونا رو حل کنید.

یه کم شبیه 548 اس جی یو هستش


  • عاشق آقای پستچی
  • :-o
    هنوز 18 دی نیومده ها :-s
    اون وقت چجوری به روز رسانی این پست 18 دی بوده؟ :-/
    پاسخ:
    ۱۸ ام دی روز امتحان ادبیاتمه... ۱۸ از اون اومده. فکر کنم ذهنم زیادی درگیرش شده D:
    ممنون :))
  • ابوالفضل اسدی
  • ادبیات که کاری نداره که
    من خودم سر امتحان نهایی ۲ نمره از خودم نوشتم
    ۲ نمره شعر حفظی ای که رو کاغذ نوشته بودم نوشتم
    ۶ نمره هم پشت سری عزیز (دوست عزیزم پوریا اصلانی)‌ رسوند
    بقیه رو هم چرت و پرت نوشتم (هر چی به ذهن میرسید)
    شدم ۱۰/۵
    :)
    پاسخ:
    مرسی جدی، کلی روحیه گرفتم الان :))
    برام دعا کن :)
    سلام من هر چه قدر کانتست میدم رتبه خوبی نمیارم!!
    مثلا تو کد فورسز رتبه ام میشه ۶۰۰ این طورا
    چه کار کنم؟؟

    پاسخ:
    کد بزن!
    سلام آخه تا چه حد؟؟؟ راستی من اول تئوری رو خوب کنم یا همزمان
    پاسخ:
    خوب اگه رتبه‌ی خوب می‌]خوای انقدر باید تمرین کنی که بتونی رتبه‌ی خوب بگیری.
    هر لحظه سعی کن اونی که ضعیفتره رو ببری جلو :)
    لایک به جواب :))
    P:

    پاسخ:
    P:
    P:
    P:
    سلام نمی خوای یه پست جدید بزاری؟؟؟؟
    slm , in  blog ro k baz mknm fekr mknm amuzeshe zabane arabie makhsusan ba un kalameie tozihol masael
    kheili khub tozih midi :D
    khodaiish ba in k khodam soalo hal kardam arzeshesho dasht raheto khundam
  • سبحان خوش دست
  • اینا چه باحالن :دی
    ۶۰۰ میشه میگه بد :دی ، باو من ۷۳۰ شدم این دفعه کلامو انداختم هوا :))
    سلام این بار به مرحمت استاد حامد ۳۵۰ شدم
  • عاشق آقای پستچی
  • همین که گفت "کد بزن!" ؟ :-o
    ایول :))))))
  • سبحان خوش دست
  • اصن مردم پشت کار دارن خفن :-<
    حامد از این چیزا به منم بگو :(
    bia man migam
    code bezan
    hamed gofte shodi 350 pas man bgm code bzn labod 1 ta 3 mishi 
    boro bache code bzn

    حامد به منم گفت /:D\
    یعنی چی؟این وسط فقط ما غریبه ایم دیگه :(
    چرا به من ازاین چیزا نمی گین؟

    salam
    code bezan
    LoOl
    @ amirmd76 : شما بچه ای هنوز :دی
    شوخی کردم ، حامد به هرکی صلاح بدونه میگه :-"
    یعنی الآن میخوای پز بدی که صلاح دونسته به تو بگه؟
    :)))))))))
    salam 
    dg code zadan ke goftan nadare 
    boro codeforces
    code bezan o contest bede hamin
    felan
    من به نمایندگی از حامد میگم :-"
    کد بزن :-"

    ٬ علی : آخه نمیدونی حامد چی تو گفتنش هست که 8->
    استاد بخوایم الگوریتممون قوی شه باید چی کار کنیم؟
    اصن دلیل این که من الان طلا نشدم این بود که آقای ولیزاده بهم نگفته بود : "کد بزن!"
    دست کم نگیرین این جمله رو! :) D:
    نصیب هر کسی نمیشه
    پاسخ:
    D:
    استاد به ما هم میگی ؟ :دی
    بچه برو خونتون :دی
    اقا حامد تو رو خدا دمه مرحله دویی یه توصیه ای یه نکته ای چیزی بگید
    به وبلاگ ما سر بزنید

    وبلاگ ما مرتبط با المپیاد کامپیوتر و المپیاد ریاضی هست

    بخش کتابخانه و پرسش خانه با کلی مطالب

    بهترین مرجع کتب الکترونیکی تا آینده ای نزدیک

    بهترین چیزها فقط در وبلاگ انفورماتیک

    informatics.blog.ir
    informatics.blog.ir
    informatics.blog.ir

    informatics.blog.ir
  • عاشق آقای پستچی
  • :(
    کی نظرای این عاشق دل خسته رو تو شااززز داره پاک میکنه؟
    شمایین؟
    اینا توطعه های آمریکاس!
    @Mr.Ramz:
    عزیزم شما خسته نمیشی تو همه ی وبلاگ های بلاگ کامنت میذاری؟؟؟
    استاد ما یه Judge online ساختیم.اجازه میدین سوالای اینجا رو توآرشیومون بذاریم؟
    استاد رفته خونه ی خدا :{ (گل بچینه)
    استاد ۱۱م رفته خونه خدا گل بچینه :دی
    الان دیگه برگشته فک کنم :دی (فردا بر میگرده ؟ :دی)

    پریشب D:
    کانتست م3 ای المپ کامپیوتر شرکت آریا ، سه شنبه 21 خرداد92 ساعت 16 تا 20 . اطلاعات بیشتر در http://aryaco.blog.ir
  • آرمان غفاری
  • کانتست مرحله سوم شرکت آریا سه شنبه 21 خرداد 92 ساعت 16 تا 20 . 
    اطلاعات بیشتر imo-ioi.blog.ir
    یا
    aryaco.blog.ir
  • آرمان غفاری
  • کانتست مرحله سوم شرکت آریا سه شنبه 21 خرداد 92 ساعت 16 تا 20 . 
    اطلاعات بیشتر imo-ioi.blog.ir

    اقای غفاری!زشته.تا چه حد آخه؟سکی؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    عمو حامد . آقای حجاریان فوت کردند .

    پاسخ:
    :(
    به کپک اعتقاد دارین؟ D:
    پاسخ:
    داریم داریم :))
    http://paste.ubuntu.com/5757566/
    پاسخ:

    جای 1000000000000000000 باید بنویسی 1000000000000000000LL. مگرنه فکر می‌کنه int هست، مقدارش رو درست نمی‌ریزه تو اون متغیره!
    ته خط ۱۲ هم که سمی‌کالن گذاشتی. با توجه به indent خط ۱۳ احتمالن نباید می‌ذاشتیش.
    :)))
    لایک
  • امیر محمد دهقان
  • D:
  • منا مهدیزاده
  • سلام ! 
    کاش به مام افتخار "کد بزن!" گفتن می دادین ! :')
    Хамед Привет, Джон!
    Ты в порядке?
    Поздравляю, сэр, на самом деле.
    World Gold снова взял год назад.
    Ваше теплое дыхание.
    Вы подняли иранский флаг снова!
    Но он действительно становится золото золото 13 так тяжело.
    Тот, кто имеет золото, тот так 13.

    В любом случае, Джон Х. Привет!
    Надеюсь, что всегда будет успешным.

    برای فهمیدن متن بالا به google translate بروید .
    زبان نوشته های بالا : روسی .
  • امیر محمد دهقان
  • http://paste.ubuntu.com/5887171/
    Hamed jun , tala dovoomia ro gerefT , tarsidi azat shirini bekhaym rafT qayem shoD?
    :)))
    :-تکوندن گرد و غبار
  • حسین مهدوی پور
  • یه سوال : این روش پویا غلطه؟
    [dp[i
    رو برابر مقدار پولی که باید برای شکست دادن i اژدها اول بپردلزه می زاریم در بین جواب های مختلف اونی که قدرت بیشتری به رستم می ده انتخاب می کنیم حالا برای محاسبه
    dp[i]          d
    میای از اول آرایه تا i رو یه دور می گردیم اون اژدها هایی رو که تا حالا نخریدیم رو چک می کنیم که با یه تومن می شه رد شد از i یا نه اگه نشد با دو تومن چک می کنیم که که حتما می شه چون i حداکثر دو تومن می خواد
    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی