נתונה מטריצה matrix (מערך דו-ממדי) שבה כל הערכים הם בני ספרה אחת, מ-0 עד 9.
נגדיר מסלול חוקי במטריצה זו כך:
• המסלול מתחיל בתא השמאלי העליון ומסתיים בתא הימני התחתון.
• אפשר לעבור מתא אחד לשני רק אם הוא שכן שלו מימין, משמאל, למעלה או למטה. לא באלכסון.
• בכל תא מותר לעבור מספר פעמים כפי הערך הנמצא בו. בתא שבו נמצא הערך 1 אפשר לעבור פעם אחת, בתא שבו הערך 7 אפשר לעבור 7 פעמים, בתא שבו הערך 0 אי אפשר לעבור.
בהינתן מספר k שלם המייצג את מספר האלמנטים בצירוף, ומספר n שלם המייצג את סכום היעד. יש להחזיר מספר שלם המייצג את מספר האפשרויות החוקיים האפשריים. אסור שתהיינה אפשרויות כפולות. וצריך להדפיס את כל האפשרויות.
סדר המסלולים בהדפסה הינו: למטה -> שמאלה -> ימינה -> למעלה
השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות כלל. כך גם כל שיטות העזר (אם תכתבו) לא יכולות להכיל לולאות.
matrix = [[2, 3], [4, 1]]
(0,0) --> (1,0) --> (1,1) = 7 (0,0) --> (1,0) --> (0,0) --> (1,0) --> (1,1) = 13 (0,0) --> (1,0) --> (0,0) --> (0,1) --> (1,1) = 12 (0,0) --> (0,1) --> (1,1) = 6 (0,0) --> (0,1) --> (0,0) --> (1,0) --> (1,1) = 12 (0,0) --> (0,1) --> (0,0) --> (0,1) --> (1,1) = 11 13
הסבר: הנה הסבר קצר לאחד מהמסלולים לעיל: 12 = (1,1) <-- (1,0) <-- (0,0) <-- (0,1) <-- (0,0) התחלנו בתא (0,0) שערכו 2, ולכן מותר לבקר בו פעמיים בלבד, ונשארה לנו פעם אחת לבקר בו. עברנו לתא (1,0) שערכו 4, משם חזרנו לתא (0,0), ואי אפשר לבקר בו יותר. משם ערבנו לבקר בתא (0,1) שערכו 3. אנחנו לא יכולים לחזור לתא (0,0) כי כבר ביקרנו בו פעמיים, אי אפשר לחזור לתא (1,0) כי הוא באלכסון, ולכן משם עברנו לתא היעד (1,1). כיוון שערכו 1, ואנחנו מבקרים בו, אנחנו לא יכולים לחזור לשום תא אחר, כי לא נוכל להגיע שוב לתא (1,1). לכן סכום המסלול שלנו הוא 12=.2+4+2+3+1 עבור המטריצה זאת תחזיר השיטה את הערך 13 שהוא סך הערכים המקסימלי אשר מתקבל במסלול חוקי כלשהו במטריצה הנתונה.
matrix = [[1, 1, 1], [1, 9, 1], [1, 1, 1]]
(0,0) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 5 (0,0) --> (1,0) --> (2,0) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 15 (0,0) --> (1,0) --> (2,0) --> (2,1) --> (1,1) --> (0,1) --> (1,1) --> (1,2) --> (2,2) = 25 (0,0) --> (1,0) --> (2,0) --> (2,1) --> (1,1) --> (0,1) --> (0,2) --> (1,2) --> (2,2) = 17 (0,0) --> (1,0) --> (1,1) --> (2,1) --> (2,2) = 13 (0,0) --> (1,0) --> (1,1) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 23 (0,0) --> (1,0) --> (1,1) --> (2,1) --> (1,1) --> (0,1) --> (1,1) --> (1,2) --> (2,2) = 33 (0,0) --> (1,0) --> (1,1) --> (2,1) --> (1,1) --> (0,1) --> (0,2) --> (1,2) --> (2,2) = 25 (0,0) --> (1,0) --> (1,1) --> (1,2) --> (2,2) = 13 (0,0) --> (1,0) --> (1,1) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 23 (0,0) --> (1,0) --> (1,1) --> (1,2) --> (1,1) --> (0,1) --> (1,1) --> (2,1) --> (2,2) = 33 (0,0) --> (1,0) --> (1,1) --> (1,2) --> (0,2) --> (0,1) --> (1,1) --> (2,1) --> (2,2) = 25 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (1,1) --> (2,1) --> (2,2) = 23 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (1,1) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 33 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (1,1) --> (1,2) --> (2,2) = 23 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (1,1) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 33 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (0,2) --> (1,2) --> (2,2) = 15 (0,0) --> (1,0) --> (1,1) --> (0,1) --> (0,2) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 25 (0,0) --> (0,1) --> (1,1) --> (2,1) --> (2,0) --> (1,0) --> (1,1) --> (1,2) --> (2,2) = 25 (0,0) --> (0,1) --> (1,1) --> (2,1) --> (2,2) = 13 (0,0) --> (0,1) --> (1,1) --> (2,1) --> (1,1) --> (1,0) --> (1,1) --> (1,2) --> (2,2) = 33 (0,0) --> (0,1) --> (1,1) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 23 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 15 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (2,0) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 25 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (1,1) --> (2,1) --> (2,2) = 23 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (1,1) --> (2,1) --> (1,1) --> (1,2) --> (2,2) = 33 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (1,1) --> (1,2) --> (2,2) = 23 (0,0) --> (0,1) --> (1,1) --> (1,0) --> (1,1) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 33 (0,0) --> (0,1) --> (1,1) --> (1,2) --> (2,2) = 13 (0,0) --> (0,1) --> (1,1) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 23 (0,0) --> (0,1) --> (1,1) --> (1,2) --> (1,1) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 25 (0,0) --> (0,1) --> (1,1) --> (1,2) --> (1,1) --> (1,0) --> (1,1) --> (2,1) --> (2,2) = 33 (0,0) --> (0,1) --> (0,2) --> (1,2) --> (2,2) = 5 (0,0) --> (0,1) --> (0,2) --> (1,2) --> (1,1) --> (2,1) --> (2,2) = 15 (0,0) --> (0,1) --> (0,2) --> (1,2) --> (1,1) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 17 (0,0) --> (0,1) --> (0,2) --> (1,2) --> (1,1) --> (1,0) --> (1,1) --> (2,1) --> (2,2) = 25 33
הסבר: במטריצה זו התא האמצעי עם ערך 9 מאפשר מספר רב של ביקורים. המסלול המקסימלי יבקר בתא זה מספר פעמים כדי למקסם את הסכום, עם סכום כולל של 33.
matrix = [[2, 2], [2, 1]]
(0,0) --> (1,0) --> (1,1) = 5 (0,0) --> (1,0) --> (0,0) --> (1,0) --> (1,1) = 9 (0,0) --> (1,0) --> (0,0) --> (0,1) --> (1,1) = 9 (0,0) --> (0,1) --> (1,1) = 5 (0,0) --> (0,1) --> (0,0) --> (1,0) --> (1,1) = 9 (0,0) --> (0,1) --> (0,0) --> (0,1) --> (1,1) = 9 9
הסבר: במטריצה זו ניתן לבקר בכל תא למעט התא האחרון פעמיים. המסלול המקסימלי יהיה לבקר בתא (0,0) פעמיים, וגם בתא (1,0) או (0,1) פעמיים, ובתא היעד פעם אחת. סך הכל: 2+2+2+2+1=9.
matrix = [[3, 0, 1], [2, 0, 4], [1, 2, 1]]
(0,0) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 9 (0,0) --> (1,0) --> (0,0) --> (1,0) --> (2,0) --> (2,1) --> (2,2) = 14 14
הסבר: במטריצה זו יש תאים עם ערך 0 שלא ניתן לבקר בהם. המסלול המקסימלי יהיה לנצל את העובדה שניתן לבקר בתא (0,0) שלוש פעמים ובתא (1,0) פעמיים, עם סכום של 3+3+2+2+1+2+1=14.
קלט:
matrix = [[2, 3], [4, 1]]
הפלט המבוקש:
(0,0) --> (1,0) --> (1,1) = 7 (0,0) --> (1,0) --> (0,0) --> (1,0) --> (1,1) = 13 (0,0) --> (1,0) --> (0,0) --> (0,1) --> (1,1) = 12 (0,0) --> (0,1) --> (1,1) = 6 (0,0) --> (0,1) --> (0,0) --> (1,0) --> (1,1) = 12 (0,0) --> (0,1) --> (0,0) --> (0,1) --> (1,1) = 11 13