คำชี้แจงปัญหา
ระบุจำนวนนักเรียน N และอาร์เรย์ที่แสดงถึงเครื่องหมายที่นักเรียนได้รับ โรงเรียนได้ตัดสินใจที่จะให้เท็ดดี้แก่พวกเขาเป็นราคา Hoever, โรงเรียนต้องการประหยัดเงิน ดังนั้นพวกเขาจึงลดจำนวนตุ๊กตาทั้งหมดที่จะแจกจ่ายโดยกำหนดให้มีข้อจำกัดดังต่อไปนี้ -
- นักเรียนทุกคนต้องได้รับตุ๊กตาอย่างน้อยหนึ่งตัว
- ถ้านักเรียนสองคนนั่งติดกัน นักเรียนที่ได้คะแนนสูงจะต้องได้คะแนนมากกว่า
- ถ้านักเรียนสองคนมีคะแนนเท่ากัน จะได้รับอนุญาตให้ได้ตุ๊กตากี่ตัว
ตัวอย่าง
สมมติว่ามีนักเรียน 3 คนและคะแนนที่ได้รับจะแสดงในอาร์เรย์ดังนี้ -
arr[] ={2, 3, 3}จำนวนตุ๊กตาที่จะแจกจ่าย:{1, 2, 1} เช่น ตุ๊กตา 4 ตัว
อัลกอริทึม
ปัญหานี้สามารถแก้ไขได้โดยใช้โปรแกรมไดนามิกดังนี้ -
<ก่อน>1. สร้างตารางขนาด N และเริ่มต้นด้วย 1 เนื่องจากนักเรียนแต่ละคนต้องได้รับตุ๊กตาอย่างน้อยหนึ่งตัว2 วนซ้ำเครื่องหมายอาร์เรย์และดำเนินการตามขั้นตอนด้านล่าง:หากนักเรียนปัจจุบันมีคะแนนมากกว่านักเรียนคนก่อน:i. รับจำนวนตุ๊กตาที่มอบให้กับนักเรียนคนก่อน ii เพิ่มจำนวนตุ๊กตาขึ้น 1 b. หากนักเรียนปัจจุบันมีคะแนนน้อยกว่านักเรียนคนก่อน:i. ตรวจสอบและเปลี่ยนแปลงค่าทั้งหมดที่กำหนดไว้ก่อนหน้านี้ตัวอย่าง
#include#include #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) โดยใช้เนมสเปซ std;int teddieDistribution (int *marks, int n) { ตาราง int [n]; กรอก(ตาราง, ตาราง + n, 1); สำหรับ (int i =0; i เครื่องหมาย [i]) { ตาราง [i + 1] =ตาราง [i] + 1; } อื่น ๆ ถ้า (เครื่องหมาย [i]> เครื่องหมาย [i + 1]) { int temp =i; ในขณะที่ (จริง) { ถ้า (ชั่วคราว>=0 &&(เครื่องหมาย [ชั่วคราว]> เครื่องหมาย [อุณหภูมิ + 1])) { ถ้า (ตาราง [อุณหภูมิ]> ตาราง [อุณหภูมิ + 1]) { --temp; ดำเนินต่อ; } อื่น { ตาราง[ชั่วคราว] =ตาราง[ชั่วคราว + 1] + 1; --ชั่วคราว; } } อื่น ๆ { แตก; } } } } จำนวนเต็มเท็ดดี้ =0; สำหรับ (int i =0; i ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
ตุ๊กตาทั้งหมดที่จะจำหน่าย:12