اولین باره که به کاهو میای؟ راهنمای سایت رو حتما بخون!

ورود ثبت‌نام راهنما درباره‌ی کاهو
پرسش‌ها برچسب‌ها کاربر‌ها سوال بپرسید!

آمار پرسش:

  • پرسیده شده: 2015-08-31 16:47:14 -0500
  • مشاهده شده: 423 بار
  • بروز شده: 2015-09-01 13:04:14 -0500

پرسش‌های مشابه:

‌فلسفه ی وجود و یا عدم وجود جفت اعداد مسخره

برنامه نویسی پویا چیست و مسائل مهم آن کدامند؟ (قسمت اول)

سوال one two one two one two...

مشکل در حل سوالات الگوریتم های داینامیک

نکاتی در مورد نوشتن پاسخ:

در این قسمت می‌تونی به یک پرسش پاسخ بدی. اگه می‌خوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخ‌ها مفید هستند حتما بهشون رای بده تا پرسش‌ها و پاسخ‌های خوب مشخص بشن.

استفاده از ویرایشگر:

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

علائم ریاضی:

برای نوشتن علائم ریاضی می‌تونی از Mathjax استفاده کنی. راهنمای Mathjax رو از سایت math.stackexchange بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.

پیدا کردن تعداد اعدادی که مجموع ارقامشان برابر با s باشد

3

از ورودی یک عدد به نام s میگریم حال باید از 1 تا 9^10تعداد اعدادی که

مجومع ارقامشان برابر با s می شود را به دست بیاوریم.

به عنوان مثال برای s=1 این تعداد می شود 10. S بین 1 تا 82 هست و تایم لیمیت 1 ثانیه است.

برنامه-نویسی-پویا
2015-08-31 16:47:14 -0500
حسن رستمی پور 98 ● 2 ● 3 ● 9
پاک‌کردن   ویرایش سوال
نظرات

چه $O$ ای مخواد؟

2015-08-31 16:54:24 -0500 توفیقی

@توفیقی سوال ویرایش شد ممنون از سوالت.

2015-08-31 17:13:37 -0500 حسن رستمی پور

اول یه تابع می دیم که تعداد جواب های معادله زیر رو به دست بیاره: x1+x2+… +xk=s به طوری که 10> xi و xi≥ 0 که با شمول تو اردر دو به توان k حل میشه سپس یه فور رو k از 1 تا 9 می زنیم و سوال حل میشه.

2015-08-31 17:31:42 -0500 شجاعی فر

اگه روش بالا درست باشه احتمالا تا حدود 10 به توان 23 جواب میده.

2015-08-31 17:42:25 -0500 شجاعی فر

@حسن رستمی پور راس میگی! حواسم نبود s بیشتر از 9*9 باشه جواب میشه ۰! xD

2015-08-31 17:50:36 -0500 توفیقی

3 پاسخ

2

اینجوری حلش می‌کنیم: $$ dp[i][j]$$ رو برابر تعداد اعداد i رقمی که مجموع ارقام آنها برابر با $j$ هست در نظر بگیر.

$dp[1][i] = 1 (i < 10) $ , $dp[1][i] (i > 9) = 0 $ هست.

حالا اینجوری پر می‌کنیم: $$ dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + dp[i-1][j-2] + ... + dp[i-1][j-9] $$ (روی یکان حالت بندی کردم که ۰ باشه، یک باشه، دو باشه و ... )

جواب مسئله برابر با : $$dp[1][s] + dp[2][s] + dp[3][s] + ... + dp[9][s]$$ هست.

2015-08-31 17:43:08 -0500
توفیقی 1621 ● 17 ● 21 ● 42
پاک‌کردن   ویرایش پاسخ
نظرات

فک کنم راه بهتر داشته باشه :)

2015-08-31 17:50:51 -0500 توفیقی

یه راه دیگه پیدا کردم با توجه به ایده @شجاعی فر که توی $O((log n)^2 )$ جواب میده.

2015-08-31 18:11:44 -0500 توفیقی

این تعداد اعدادو میده ما خود اعدادو مگه نمیخوایم؟؟؟

2015-09-01 01:12:04 -0500 حمیدرضا کامکاری

@توفیقی ممنون خوب بود :)

2015-09-01 03:20:43 -0500 حسن رستمی پور

@حمیدرضا کامکاری نه تعداد رو می خواد.

2015-09-01 03:21:13 -0500 حسن رستمی پور
2

فایل A.3 دینامیکشه

فایل A.4 recursive هست

http://hrzuser.persiangig.com/A.3.cpp

http://hrzuser.persiangig.com/A.4.cpp

2015-09-01 01:28:16 -0500
حمیدرضا کامکاری 204 ● 6 ● 10 ● 18
پاک‌کردن   ویرایش پاسخ
نظرات

کدت که همون ایده ی @توفیقی هست!

2015-09-01 03:22:51 -0500 حسن رستمی پور

اره دیگه کدشو نوشتم!!! میخوای حالتی که اعداد رو هم بهمون بده بنویسم؟؟

2015-09-01 03:47:04 -0500 حمیدرضا کامکاری

(O(slogn متغیر n کران بالای اعداده لگاریتمم در مینای دهه از این اردر پایین تر به روش داینامیک نداریم(مطمئنم)

2015-09-01 03:50:51 -0500 حمیدرضا کامکاری

خوبه افرین ؛) ممنون

2015-09-01 05:38:55 -0500 حسن رستمی پور

Chera mesle arash mahmoudian code mizani? mage badbakhte bichare che gonahi karde ke bayad daste adami mesle to biofte? badesham az oon asr hajar dara noobe badbakht akhe ki esme motaghayerasho "func" mizare

2015-09-01 07:56:04 -0500 خرس بقال
1

سلام. اول یه لم می دیم که با اون سوال خیلی ساده تر حل میشه و نیازی به استفاده از اصل شمول و عدم شمول به طور مستقیم نیست.

لم: تعداد جواب های معادله $ x_1+x_2+...+x_k = n $ در مجموعه اعداد $ {0,1,2,....,r} $ (محموعه اعداد حسابی کوچکتر از $r+1$) از فرمول زیر محاسبه میشه.

$\sum_{j=0}^{k} (-1)^j\binom{k}{j}\binom{n-jr+k-1}{k-1}$

برهان:

برای اثبات ابتدا جزوه زیر رو بخونید. اثبات این لم مشابه برهانی است که برای قضیه 1آورده شده است.

کاربرد هایی از اصل شمول و عدم شمول - داشنامه رشد.

حالا کافیه یه تابع بنویسید که مقدار فرمول بالا رو برای $ k$ و $ r $ دلخواهی محاسبه کنه و با اون تعداد جواب های معادله برای $r=10 $ و k=9$ $ محاسبه کنید

توجه داشته باشید که با این فرمول تعداد همه عددهای حداکثر $k$ رقمی که جمعشون برابر $n$ باشه رو میشه محاسبه کرد.

2015-09-01 04:52:01 -0500
شجاعی فر 109 ● 1 ● 5
پاک‌کردن   ویرایش پاسخ
نظرات

ایده باحالی بود افرین:) پیاده سازی این هم خیلی ساده تره.

2015-09-01 06:12:33 -0500 حسن رستمی پور

:||| BEKHODA KHEILI KHARIN. 8 ta for 0-9 bendaz bebin jameshoon s mishe ya na

2015-09-01 07:51:42 -0500 خرس بقال

OLAGHI TO

2015-09-01 07:52:05 -0500 خرس بقال

@خرس بقال عزیزم اولا ۸ تا نه ۹ تا for باید بزنی بعدشم اگه اوردرش رو حساب کنی میشه ۱۰ به توان ۹ یعنی اینکه تایم میشه!!لطفا یکم فکر کن بعد نظر بده.!

2015-09-01 08:28:28 -0500 حسن رستمی پور

Kodan, harfe dahaneto befahm. To hichi bejoz ye noob hasti ke miyay too shalvare ma baad be ma enteghaad vared mikoni?

2015-09-01 10:27:16 -0500 خرس بقال

پاسخ شما

فقط در صورتی که پاسخی برای این پرسش دارید، آن را اینجا بنویسید و برای بحث کردن از قسمت «ثبت‌ نظر» استفاده کنید. شما می‌توانید قبل از وارد شدن به سایت پاسخ خود را بنویسید. این پاسخ ذخیره می‌شود و زمانی که شما وارد سایت شدید یا ثبت‌نام کردید منتشر می‌شود.

پیش‌نمایش:

کلیه‌ی حقوق این سایت متعلق به کمیته‌ی ملی المپیاد کامپیوتر است.