IKIU-CE, The computer-engineering students web log - Qazvin, وب‌نوشت دانشجویان گروه مهندسی کامپیوتر - قزوین
یادداشت‌ها: فارسی ، Posts: English

۱۳۸۸ شهریور ۴, چهارشنبه

SG2009 - The Final Problem

خوب است به عنوان آخرین مسئلهای که در بازی‌های تابستانی امسال مطرح میکنیم، به مسئلهای کاربردی بپردازیم که خود شما و سایر دانشجویان نیز بتوانید در عمل از نتیجه آن استفاده کنید.

سوال سیزدهم: بیشترین واحد
سطح: سه
زمان حل: ۳ روز
کلمات کلیدی حل: NP-Complete، شما بگید!
نکات کلیدی حل: ۱. از هر راهی که جواب می‌دهد، حل کنید. ۲. این گونه مسایل را سعی کنید با دید گرافی حل کنید. ۳. این مسئله یک مسئله کلی‌تر نسبت به پروژه هشتم طراحی الگوریتم است. ۴. شما بگید!
فایل اجرایی: دریافت کنید: ویندوز  لینوکس
توضیحاتِ پس از حل: { با توجه به NP-hard بودن مسئله، اکثر راه حل‌های ساده، جواب می‌دهد. راه حلی که لینک دریافت آن قرار داده شده است دارای پیچیدگی O(n22n) است. در کامپیوترهای امروزی یک میلیارد دستور در کمتر از یک ثانیه اجرا می‌شوند از این رو چنین برنامه‌ای در عمل قابل استفاده است و دانشجویان می‌توانند برنامه‌ریزی انتخاب واحد خود را به آن بسپارند. الگوریتم‌های تقریب نیز برای این مسئله وجود دارد ولی خطای آن بیش از اندازه‌ای است که قابل چشم‌پوشی در یک انتخاب واحد، با دروس اندک باشد. همچنین می‌توانید سلایق خود را بیشتر در نحوه برنامه‌ریزی برنامه‌ای که نوشته‌اید دخیل کنید. مثلا ممکن است فردی به جهت مسافت دور تمایل داشته باشد تا شنبه صبح حدالامکان درسی نداشته باشد یا برخی مایلند بیشتر برنامه‌هایشان در نیمه اول روز باشد یا حتی در صورت امکان درس‌ها در چند روز بخصوصی از هفته باشد و مابقی هفته برنامه‌ای نداشته باشد. این‌ها همه ویژگی‌هایی است که می‌توانید در برنامه خود اعمال کنید. فکر می‌کنید در اطرافتان چه موضوعات دیگری برای برنامه‌ریزی خودکار وجود دارد؟ }

و اما صورت مسئله:

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

ورودی:
ورودی شامل دروس قابل انتخاب برای یک دانشجو است. در خط اول، تعداد رکوردهای دروس 1<=N<=30 قرار دارد. در N خط بعدی رکوردها با قالب زیر قرار دارند:
[CourseID: a base 30 number: 0-9a-tA-T][Name: a string of up to 30 alphabetical characters (a-zA-Z)][Units: 1-9][L:Lecture times per week: 1-9][L times: DHHMM-HHMMT]
قسمت اول حاوی شناسه هر رکورد و عددی در مبنای 30 است که با کاراکترهای 0 تا 9 یا a/A تا t/T معین می
شود. در صورت وجود چندین درس با شناسه یکسان فقط یکی از آنها می‌تواند در خروجی وجود داشته باشد.
قسمت دوم نام درس است، رشته
‌ای از کاراکترهای الفبایی با طول حداکثر ۳۰ کاراکتر.
قسمت سوم تعداد واحدهای آن درس قرار دارد و عددی یک رقمی است.
قسمت چهارم تعداد جلسات در هفته آن درس را مشخص می
کند و عددی یک رقمی است.
قسمت پنجم به تعداد جلسات درس، زمان هر جلسه را مشخص می
کند. زمان در قالب DHHMM-HHMMT است که HHMM نخست ساعت شروع HHMM دوم ساعت پایان جلسه را مشخص میکند. T زوج یا فرد بودن جلسه را مشخص میکند، برای جلسات زوج E، برای جلسات فرد O و برای جلسات عادی A است. D روز جلسه را به صورت زیر مشخیص می کند:
شنبه: A
یکشنبه: S
دوشنبه: M
سه
شنبه: T
چهارشنبه: W
پنج
شنبه: U
جمعه: F

خروجی:
خروجی باید سه برنامه قابل انتخاب (در صورت وجود) با بیشترین واحد قابل انتخاب را معرفی کند. فرمت خروجی باید همانند نمونه باشد.

نمونه ورودی:
6
1MemariA33W0800-1000OW1000-1200AW1300-1500A
1MemariB33W0800-1000ET1300-1500AW1000-1200A
2TarrahiA33M1700-1900OA1300-1500AS1700-1900A
2TarrahiB33M1700-1900ES1300-1500AW0800-1000A
4HushA33A1700-1900OM0800-1000AM1700-1900A
4HushB33M1300-1500ET1000-1200AT0800-1000A
نمونه خروجی:
Program #1:
Courses:
1. MemariB 2. TarrahiA 3. HushB
Units: 9
Program #2:
Courses:
1. MemariA 2. TarrahiA 3. HushB
Units: 9
Program #3:
Courses:
1. MemariB 2. HushA
Units: 6

برنامه‌های خود را به وبلاگ ارسال کنید.
موفق باشید.

7 نظر:

ناشناس گفت...

نمیدانم چرا برخی به این سوال به دید اعتراض به مشکلات پیش‌آمده در برنامه‌ریزی واحدهای این ترم نگاه می‌کنند.
جهت اطلاع این دوستان عرض می‌کنم که کلوپ پژوهشی ای‌سی‌ام و سوالات مطرح‌شده در بازی‌های تابستانی هیچ ارتباطی به مشکلاتی این چنین ندارد و اصلا کلوپ ای‌سی‌ام، جایگاه اعتراض به سیاست‌های گروه یا هر ارگان دیگر نیست.

123 گفت...

چرا این برنامه توی بعضی از کامپیوتر ها run نمیشه؟

ناشناس گفت...

احتمالا چون این برنامه روی لینوکس کامپایل شده. سعی می‌کنم بزودی یک نسخه قابل اجرا روی ویندوز رو هم قرار بدم.
مرسی از پیامتون.

n گفت...

اگه امکان داره یه کم بیشتر در مورد مسابقات هفتگی توضیح بدین.

ناشناس گفت...

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

n گفت...

چه طوری میشه سوالو دریافت کرد وقتی وارد لینک میشی هیچی نیست؟
شنبه از چه ساعتی شروع میشه؟

ناشناس گفت...

وقتی وارد لینک میشید نوشته
"The contest has not yet started." !

زمان شروع مسابقات در ستون چپ صفحه بلاگ مشخص شده‌اند. مسابقه بعدی:
2009-09-05 23:30