যত তাড়াতাড়ি সম্ভব "কাজ শেষ করুন"


20

পটভূমি

এক মুহুর্তের জন্য কল্পনা করুন যে আপনার মন-বোকা বোরিং কাজ রয়েছে। প্রতিদিন সকালে, আপনাকে কার্যগুলির একটি সংকলন দেওয়া হয় যা আপনার সেদিন কাজ করা উচিত। প্রতিটি টাস্কের একটি নির্দিষ্ট সময়কাল থাকে এবং একবার শুরু হয়ে গেলে এটি অবশ্যই একবারে সম্পন্ন করতে হবে। আপনার বস অলসতা সহ্য করবেন না, তাই বাড়িতে যাওয়ার আগে যদি এমন কিছু কাজ আপনি এখনও শেষ করতে পারেন তবে আপনাকে অবশ্যই তার একটিতে কাজ করতে হবে (আপনি কোনটি চয়ন করতে পারেন)। বিপরীতে, যদি বাকী সমস্ত কাজগুলির জন্য আপনাকে ওভারটাইম কাজ করার প্রয়োজন হয়, আপনি তাড়াতাড়ি বাড়ি যাবেন! সুতরাং আপনার লক্ষ্যটি হ'ল চৌকস সময়সূচী দ্বারা আপনার কর্ম দিবসের দৈর্ঘ্য হ্রাস করা।

মজাদার ঘটনা: এটি অলস আমলাতন্ত্র সময়সূচী সমস্যার একটি বৈকল্পিক এবং এটি এনপি-হার্ড ( উত্স )।

ইনপুট

আপনার দুটি ইনপুট রয়েছে: আপনার Lকার্য দিবসে "টাইম ইউনিটগুলির সংখ্যা" (ধনাত্মক পূর্ণসংখ্যার ) এবং কার্যাদি সংগ্রহ (কার্যের পূর্ণসংখ্যার Tউপস্থাপনকারী ধনাত্মক পূর্ণসংখ্যার একটি খালি অ্যারে )। এগুলি যে কোনও ক্রমে, এবং কোনও যুক্তিসঙ্গত বিন্যাসে নেওয়া যেতে পারে। অ্যারেতে Tসময়কাল সহ বেশি কাজ থাকতে পারে Lতবে এটি অন্ততপক্ষে অন্তত একটি কার্য অন্তর্ভুক্ত করার গ্যারান্টিযুক্ত L

আউটপুট

একটি বৈধ সময়সূচী হ'ল কার্যগুলির একটি উপসেট S ⊆ Tযা sum(S) ≤ Lএবং প্রতিটি কাজের মধ্যে S(বহুগুণ গণনা করা) সময়সীমা কঠোরভাবে বেশি হয় L - sum(S)। আপনার আউটপুটটি কোনও বৈধ সময়সূচির ক্ষুদ্রতম সম্ভাব্য যোগফল হবে। অন্য কথায়, আপনি আজ কাজ করতে হবে ন্যূনতম সময় ইউনিট আউটপুট।

উদাহরণ

ইনপুট বিবেচনা করুন

L = 9
T = [3,4,4,4,2,5]

আপনার দিন নির্ধারণের একটি উপায় হ'ল [4,4]: আপনি 8 টি ইউনিটে দুটি কাজ শেষ করেছেন এবং আপনার 1 ইউনিট বাকি রয়েছে। যেহেতু কোনও 1-ইউনিটের কাজ উপলভ্য নয়, আপনি ঘরে যেতে পারেন। তবে তফসিলটি [2,5]আরও ভাল: আপনি time টি সময় ইউনিটের জন্য কাজ করেন এবং তারপরে বাকি সমস্ত কার্যগুলিতে 3 বা ততোধিক সময় ইউনিট লাগবে। শিডিউলটি [2,4]বৈধ নয়, যেহেতু 6 টি ইউনিট কাজ করার পরেও আপনার কাছে 3-ইউনিটের কাজ শেষ করার জন্য পর্যাপ্ত সময় থাকতে হবে। 7 টি ইউনিট অনুকূল হতে দেখা যায়, সুতরাং সঠিক আউটপুট 7

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়। সময় বেঁধে দেওয়া হয় না, তাই নিষ্ঠুরভাবে বাধ্য করা পুরোপুরি গ্রহণযোগ্য।

পরীক্ষার মামলা

এগুলি বিন্যাসে দেওয়া হয় L T -> output

 1 [1,2] -> 1
 6 [4,1] -> 5
 7 [7,7,9] -> 7
 9 [3,4,4,4,2,5] -> 7
20 [6,2,3,12,7,31] -> 17
42 [7,7,7,7,8,8,8] -> 36
42 [7,7,7,7,7,8,8,8] -> 35
42 [7,7,7,7,7,7,8,8,8] -> 36
16 [1,2,3,4,5,6,7,8,9,10] -> 13
37 [15,27,4,1,19,16,20,26,29,18] -> 23
22 [24,20,8,8,29,16,5,5,16,18,4,9] -> 18
80 [10,22,11,2,28,20,27,6,24,9,10,6,27,2,15,29,27] -> 71
59 [26,28,5,4,7,23,5,1,9,3,7,15,4,23,7,19,16,25,26] -> 52

উত্তর:


3

জেলি, 20 বাইট

³œ-;⁴Ṃ;¹S>⁴
ŒPÇÐfS€Ṃ

এটি অনলাইন চেষ্টা করুন!

টিআইও তার সেকেন্ড টাইম সীমাতে শেষ পরীক্ষার কেসগুলি শেষ করার জন্য যথেষ্ট দ্রুত, এমনকি সবে মাত্র।

পটভূমি

অ্যালগরিদম সহজ এবং অদক্ষ উভয়:

  1. আমরা টি এর সমস্ত সাবসেট তৈরি করি , গুণাগুলি গণনা করি।

  2. নিম্নোক্ত মানদণ্ডগুলির মধ্যে যে কোনও একটি পূরণ করে কেবল সেই সাবসেটগুলি রেখে আমরা সাবসেটগুলি ফিল্টার করি:

    • এস টি থেকে আলাদা এবং এস এর উপাদানের যোগফল এবং এস-তে নয় এমন ন্যূনতম উপাদানের যোগফল এল এর চেয়ে বড় ।

    • এস এবং টি অভিন্ন।

    ফিল্টার করা টি (আসুন একে 'টি' বলুন ) এখন টাস্কের সমস্ত তালিকা রয়েছে যা কেবলমাত্র পর্যাপ্ত কাজ (বা কিছুটা ওভারটাইম এমনকি) করে।

  3. টি তে সমস্ত এস এর মধ্যে সর্বনিম্ন অঙ্কের সাথে একটিটি বেছে নিন।

কিভাবে এটা কাজ করে

ŒPÇÐfS€Ṃ     Main link. Left input: T (list). Right input: L (integer).

ŒP           Powerset; generate all subsets of T.
   Ðf        Filter them...
  Ç            applying the helper link.
     S€      Compute the sum of each kept subset.
       Ṃ     Take the minimum.

³œ-;⁴Ṃ;¹S>⁴  Helper link. Input: A (subset of T)

³œ-          Multiset subtraction; remove the elements of A from T, counting
             multiplicities.
   ;⁴        Append L to the resulting list.
     Ṃ       Take the minimum.
             If S == T, the difference was empty and the minimum is L.
      ;¹     Prepend the minimum to A.
        S    Compute the sum.
         >⁴  Compare it with L.
             If S == T, the comparison will return 1.

1

পাইথ, 26 25 বাইট

JEhSsMf&gJsT>hS.-QT-JsTyQ

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

আমি শেষ দুটি পরীক্ষার কেস চালাতে সক্ষম হইনি (তাদের অনলাইনে সময় শেষ হয়েছে, আমি ধরে নিই), তবে অন্য সমস্ত কাজ করে। এটি কেবলমাত্র একটি প্রাথমিক উদ্দীপনা সমাধান।


1

রুবি, 124 বাইট

->(m,s){
f=proc{|l,t|t.reject!{|x|x>l}
(0...(t.size)).map{|x|
f.call(l-t[x],t[0,x]+t[(x+1)..-1])
}.max||l
}
m-f.call(m,s)
}

এটি একটি নিষ্ঠুর শক্তি সমাধান।


1

এমএটিএল , 36 বাইট

iTFinZ^!"2G@2#)sXKt1G>~wb+lG>A*?KhX<

এটি অনলাইন চেষ্টা করুন!

i           % input number L
TF          % array [true, false]
in          % input array T. Get its length
Z^!         % Cartesian power and transpose. Each column is a selection from T
"           % for each selection
  2G@2#)    %   take non-selected and then selected tasks
  sXK       %   sum of selected tasks. Copy to clipboard K
  t1G>~     %   duplicate. Is sum of selected tasks <= L?
  wb        %   swap, rotate
  +         %   sum of selected tasks plus each non-selected task
  lG>A      %   are all of those numbers greater than L?
  *         %   are both conditions met?
  ?         %   if so
    Kh      %     paste current minimum (or initially L), append new value
    X<      %     compute new minimum
            %   end if implicitly
            % end for each implicitly
            % display stack implicitly
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.