สมมติว่าเรามีสองค่า n และ m เราต้องหาจำนวนการจัดเรียงที่เป็นไปได้ของเมทริกซ์ต่ำต้อยของคำสั่ง n x m กล่าวกันว่าเมทริกซ์มีความอ่อนน้อมถ่อมตนเมื่อ
- ประกอบด้วยแต่ละองค์ประกอบในช่วง 1 ถึง n x m เพียงครั้งเดียว
- สำหรับคู่ดัชนีสองคู่ (i1, j1) และ (i2, j2) ถ้า (i1 + j1) <(i2 + j2) แล้ว Mat[i1, j1]
หากคำตอบมีขนาดใหญ่เกินไป ให้ส่งคืนผลลัพธ์ mod 10^9 + 7
ดังนั้น หากอินพุตเป็น n =2 m =2 เอาต์พุตจะเป็น 2 เนื่องจากมีเมทริกซ์ที่เป็นไปได้สองอัน -
1 | 2 |
3 | 4 |
และ
1 | 3 |
2 | 4 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- p :=10^9+7
- ผลลัพธ์ :=รายการที่มีค่า 1
- สำหรับ x ในช่วง 2 ถึง 10^6 ให้ทำ
- temp :=องค์ประกอบสุดท้ายของผลลัพธ์
- temp :=(temp*x) mod p
- ใส่ temp ที่ส่วนท้ายของผลลัพธ์
- ถ้า m> n แล้ว
- อุณหภูมิ :=n
- น :=ม
- ม :=อุณหภูมิ
- ผลผลิต :=1
- สำหรับ x ในช่วง 1 ถึง m ให้ทำ
- prod :=(prod * result[x-1]) mod p
- prod :=(prod^2) mod p
- สำหรับ x ในช่วง 0 ถึง n - m ทำ
- prod :=(prod * result[m-1]) mod p
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
p = 10**9+7 def solve(n, m): result = [1] for x in range(2,10**6+1): temp = result[-1] temp = (temp*x) % p result.append(temp) if(m > n): temp = n n = m m = temp prod = 1 for x in range(1,m): prod = (prod * result[x-1]) % p prod = (prod**2) % p for x in range(n-m+1): prod = (prod*result[m-1]) % p return prod n = 3 m = 3 print(solve(n, m))
อินพุต
3, 3
ผลลัพธ์
24