{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":61277,"title":"The Optimal 2D Guillotine Cutting Stock Problem","description":"You are working in a factory that produces rectangular glass sheets. You have a large stock plate of size W x H. Customers have placed order for N differents types of smaller rectangular pieces. Each piece type  has dimensions  and a specific market value .\r\nThe Challenge:\r\nYou need to cut the stock plate to maximize the total value of the pieces obtained. However, you must follow the Guillotine Cut constraint:\r\nEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\r\nYou can rotate the pieces 90 degrees if it helps.\r\nThis is a \"2nd-stage\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). Or, to make it harder, we allow recursive guillotine cuts to any depth.\r\nInput:\r\nStockSize: A 1x2 vector [W, H] ( The dimensions of the large plate ).\r\nItems: An N x 3 matrix. Each row is [width, height, value].\r\nOutput:\r\nmaxValue: The maximum total value you can extract from the stock plate","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 440.367px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 333.5px 220.183px; transform-origin: 333.5px 220.183px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63.4667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 31.7333px; text-align: left; transform-origin: 309.5px 31.7333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou are working in a factory that produces rectangular glass sheets. You have a large stock plate of size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eW\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e x \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eH\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Customers have placed order for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e differents types of smaller rectangular pieces. Each piece type \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\"\u003ei\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e has dimensions \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"42.5\" height=\"20\" style=\"width: 42.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and a specific market value \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAoCAYAAAALz1FrAAACwElEQVR4AeyUy2sTURTG8ywp8ZGHcdMQ8pDUVhdCRDdupG7cu3El6lYpuHInUgu6EOrOjX+BiAs3LqQILpRiBIt1EclDk6oxTQjGkiaTSfzdSZxmwtxIIJQuMnxnzrnnnjnf3O/eGZtlD64JyUgiT+SayDWSAiMVT07XPpcrHo8fiUQil7CH2AesGo1GL/S/djAYnCb/FFOYu59IJJz982axYeNTqdRWNpt9brVa31N8HDvc6XTO4AchGjuYu14ul08MTg6ODSS9SbVWq72gwdve+BTegWkoFAp1gkVe5DO+3m63f+OHwozEUiqV/tDkU+/JWWT09GLNsdpNXmIDe/ONS0tyQ744Mmaxl4FA4AApDaYkYgaSNeGxQKPRCOB1xGKxMATz1Dwm2cI0MD5IICQOulyuQ8QapCSqqlaoUDG/3W6fwf+DFYmuMFjz+Xzv8DrS6XQS8iiJc/l8/jteg5TE4XD8okLoPcWD08QawuGwOAgLvPXdZDKpaMm+Wy6Xq+awvpRFSkKTIoVVzALJnPDIdJT8I+I77MtXvA6xB8yfZF+uhkKheX2CQEqiKIpK8zY1GsT3gUxLDJ5B8Aqvg7kZt9t9i/kktoQKhhVKSSDY4a23RCf8MafTuYL/wT6skOtgOjjWmzabbZWEgl9vNpsFYh1Sknq9rkC03au8Rqx6vd5ls30QNaxAfJRu4nVId/A6pCR6RTd44vf7F2UElDhY5QK+CdlrvGGlUhKW3eHBJvYAiW4MIbD0PtZZVpvnuG9AYoCUpFgsbrPBFzOZzO1hBKJbq9US/7kY8UePx/MTb4CUxFD1nwESafvBqlcrlcoc39LZ/kfGQkLz0zStIpc4ujdZ2RfGOsZCQjfxYbohuwzRMqdL/JJIdzEWEvbuHjaFnc9xdVvv3sdCstvOPJqQmOsiyU7kkghjnt4Tuf4CAAD//8TjrT8AAAAGSURBVAMAfikUYGkCd6MAAAAASUVORK5CYII=\" width=\"12.5\" height=\"20\" style=\"width: 12.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe Challenge:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 21px; text-align: left; transform-origin: 309.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou need to cut the stock plate to maximize the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etotal value\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of the pieces obtained. However, you must follow the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eGuillotine Cut constraint:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 61.3px; transform-origin: 316.5px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8667px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 20.4333px; text-align: left; transform-origin: 288.5px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou can rotate the pieces 90 degrees if it helps.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.3px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 30.65px; text-align: left; transform-origin: 288.5px 30.65px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is a \"2nd-stage\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eOr, to make it harder, we allow recursive guillotine cuts to any depth.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 40.8667px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 20.4333px; transform-origin: 316.5px 20.4333px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eStockSize: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA 1x2 vector \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e[W, H]\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ( The dimensions of the large plate ).\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eItems:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e An \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ex 3 matrix. Each row is \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e[width, height, value].\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20.4333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 10.2167px; transform-origin: 316.5px 10.2167px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003emaxValue:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e The maximum total value you can extract from the stock plate\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function maxValue = solve_guillotine(StockSize,Item)\r\n\r\nend","test_suite":"%% Test Case 1: \r\nassert(isequal(solve_guillotine([10, 10], [5, 5, 100]), 400))\r\n\r\n%% Test Case 2: \r\nItems2 = [3, 3, 10; 4, 2, 8; 1, 10, 12];\r\nassert(isequal(solve_guillotine([10, 10], Items2), 120)) % Giá trị giả định\r\n\r\n%% Test Case 3: \r\nrand_w = randi([15, 20]);\r\nrand_h = randi([15, 20]);\r\nval1 = randi([50, 100]);\r\nval2 = randi([50, 100]);\r\nitems_rand = [rand_w, floor(rand_h/2), val1; rand_w, ceil(rand_h/2), val2];\r\nexpected = val1 + val2;\r\nactual = solve_guillotine([rand_w, rand_h], items_rand);\r\nassert(actual \u003e= expected);\r\n\r\n%% Test Case 4: \r\nassert(isequal(solve_guillotine([5, 5], [10, 10, 100; 6, 2, 50]), 0))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":4945722,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-17T14:07:03.000Z","updated_at":"2026-03-22T13:04:25.000Z","published_at":"2026-03-17T14:07:03.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are working in a factory that produces rectangular glass sheets. You have a large stock plate of size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e x \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eH\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e. Customers have placed order for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e differents types of smaller rectangular pieces. Each piece type \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ei\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e has dimensions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ew_{i} \\\\times h_{i}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e and a specific market value \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_{i\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe Challenge:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eYou need to cut the stock plate to maximize the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etotal value\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e of the pieces obtained. However, you must follow the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGuillotine Cut constraint:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eYou can rotate the pieces 90 degrees if it helps.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eThis is a \\\"2nd-stage\\\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOr, to make it harder, we allow recursive guillotine cuts to any depth.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eStockSize: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eA 1x2 vector \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[W, H]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e ( The dimensions of the large plate ).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eItems:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e An \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003ex 3 matrix. Each row is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[width, height, value].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaxValue:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e The maximum total value you can extract from the stock plate\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":61277,"title":"The Optimal 2D Guillotine Cutting Stock Problem","description":"You are working in a factory that produces rectangular glass sheets. You have a large stock plate of size W x H. Customers have placed order for N differents types of smaller rectangular pieces. Each piece type  has dimensions  and a specific market value .\r\nThe Challenge:\r\nYou need to cut the stock plate to maximize the total value of the pieces obtained. However, you must follow the Guillotine Cut constraint:\r\nEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\r\nYou can rotate the pieces 90 degrees if it helps.\r\nThis is a \"2nd-stage\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). Or, to make it harder, we allow recursive guillotine cuts to any depth.\r\nInput:\r\nStockSize: A 1x2 vector [W, H] ( The dimensions of the large plate ).\r\nItems: An N x 3 matrix. Each row is [width, height, value].\r\nOutput:\r\nmaxValue: The maximum total value you can extract from the stock plate","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 440.367px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 333.5px 220.183px; transform-origin: 333.5px 220.183px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63.4667px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 31.7333px; text-align: left; transform-origin: 309.5px 31.7333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou are working in a factory that produces rectangular glass sheets. You have a large stock plate of size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eW\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e x \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eH\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Customers have placed order for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e differents types of smaller rectangular pieces. Each piece type \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\"\u003ei\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e has dimensions \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"42.5\" height=\"20\" style=\"width: 42.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and a specific market value \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-6px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAoCAYAAAALz1FrAAACwElEQVR4AeyUy2sTURTG8ywp8ZGHcdMQ8pDUVhdCRDdupG7cu3El6lYpuHInUgu6EOrOjX+BiAs3LqQILpRiBIt1EclDk6oxTQjGkiaTSfzdSZxmwtxIIJQuMnxnzrnnnjnf3O/eGZtlD64JyUgiT+SayDWSAiMVT07XPpcrHo8fiUQil7CH2AesGo1GL/S/djAYnCb/FFOYu59IJJz982axYeNTqdRWNpt9brVa31N8HDvc6XTO4AchGjuYu14ul08MTg6ODSS9SbVWq72gwdve+BTegWkoFAp1gkVe5DO+3m63f+OHwozEUiqV/tDkU+/JWWT09GLNsdpNXmIDe/ONS0tyQ744Mmaxl4FA4AApDaYkYgaSNeGxQKPRCOB1xGKxMATz1Dwm2cI0MD5IICQOulyuQ8QapCSqqlaoUDG/3W6fwf+DFYmuMFjz+Xzv8DrS6XQS8iiJc/l8/jteg5TE4XD8okLoPcWD08QawuGwOAgLvPXdZDKpaMm+Wy6Xq+awvpRFSkKTIoVVzALJnPDIdJT8I+I77MtXvA6xB8yfZF+uhkKheX2CQEqiKIpK8zY1GsT3gUxLDJ5B8Aqvg7kZt9t9i/kktoQKhhVKSSDY4a23RCf8MafTuYL/wT6skOtgOjjWmzabbZWEgl9vNpsFYh1Sknq9rkC03au8Rqx6vd5ls30QNaxAfJRu4nVId/A6pCR6RTd44vf7F2UElDhY5QK+CdlrvGGlUhKW3eHBJvYAiW4MIbD0PtZZVpvnuG9AYoCUpFgsbrPBFzOZzO1hBKJbq9US/7kY8UePx/MTb4CUxFD1nwESafvBqlcrlcoc39LZ/kfGQkLz0zStIpc4ujdZ2RfGOsZCQjfxYbohuwzRMqdL/JJIdzEWEvbuHjaFnc9xdVvv3sdCstvOPJqQmOsiyU7kkghjnt4Tuf4CAAD//8TjrT8AAAAGSURBVAMAfikUYGkCd6MAAAAASUVORK5CYII=\" width=\"12.5\" height=\"20\" style=\"width: 12.5px; height: 20px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe Challenge:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 21px; text-align: left; transform-origin: 309.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou need to cut the stock plate to maximize the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003etotal value\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of the pieces obtained. However, you must follow the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eGuillotine Cut constraint:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 122.6px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 61.3px; transform-origin: 316.5px 61.3px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 40.8667px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 20.4333px; text-align: left; transform-origin: 288.5px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou can rotate the pieces 90 degrees if it helps.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 61.3px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 30.65px; text-align: left; transform-origin: 288.5px 30.65px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is a \"2nd-stage\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eOr, to make it harder, we allow recursive guillotine cuts to any depth.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 40.8667px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 20.4333px; transform-origin: 316.5px 20.4333px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eStockSize: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA 1x2 vector \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e[W, H]\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ( The dimensions of the large plate ).\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eItems:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e An \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ex 3 matrix. Each row is \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e[width, height, value].\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 309.5px 10.5px; text-align: left; transform-origin: 309.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20.4333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 316.5px 10.2167px; transform-origin: 316.5px 10.2167px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 288.5px 10.2167px; text-align: left; transform-origin: 288.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003emaxValue:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e The maximum total value you can extract from the stock plate\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function maxValue = solve_guillotine(StockSize,Item)\r\n\r\nend","test_suite":"%% Test Case 1: \r\nassert(isequal(solve_guillotine([10, 10], [5, 5, 100]), 400))\r\n\r\n%% Test Case 2: \r\nItems2 = [3, 3, 10; 4, 2, 8; 1, 10, 12];\r\nassert(isequal(solve_guillotine([10, 10], Items2), 120)) % Giá trị giả định\r\n\r\n%% Test Case 3: \r\nrand_w = randi([15, 20]);\r\nrand_h = randi([15, 20]);\r\nval1 = randi([50, 100]);\r\nval2 = randi([50, 100]);\r\nitems_rand = [rand_w, floor(rand_h/2), val1; rand_w, ceil(rand_h/2), val2];\r\nexpected = val1 + val2;\r\nactual = solve_guillotine([rand_w, rand_h], items_rand);\r\nassert(actual \u003e= expected);\r\n\r\n%% Test Case 4: \r\nassert(isequal(solve_guillotine([5, 5], [10, 10, 100; 6, 2, 50]), 0))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":4945722,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-17T14:07:03.000Z","updated_at":"2026-03-22T13:04:25.000Z","published_at":"2026-03-17T14:07:03.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are working in a factory that produces rectangular glass sheets. You have a large stock plate of size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eW\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e x \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eH\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e. Customers have placed order for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e differents types of smaller rectangular pieces. Each piece type \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ei\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e has dimensions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ew_{i} \\\\times h_{i}\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e and a specific market value \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ev_{i\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe Challenge:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eYou need to cut the stock plate to maximize the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etotal value\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e of the pieces obtained. However, you must follow the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGuillotine Cut constraint:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eEvery cut must go from one edge of the current plate to the opposite edge in a straight line (horizontal or vertical), splitting the plate into two smaller rectangles.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eYou can rotate the pieces 90 degrees if it helps.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eThis is a \\\"2nd-stage\\\" guillotine problem, meaning you first cut the stock plate into several strips (first stage), and then each strip is cut into individual pieces (second stage). \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOr, to make it harder, we allow recursive guillotine cuts to any depth.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eStockSize: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003eA 1x2 vector \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[W, H]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e ( The dimensions of the large plate ).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eItems:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e An \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003ex 3 matrix. Each row is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[width, height, value].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaxValue:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr/\u003e\u003cw:t\u003e The maximum total value you can extract from the stock plate\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"gcsp\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"gcsp\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"gcsp\"","","\"","gcsp","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4f461a58c8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4f461a5828\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4f461a4ec8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4f461a5be8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4f461a5b48\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4f461a5a08\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4f461a5968\u003e":"tag:\"gcsp\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4f461a5968\u003e":"tag:\"gcsp\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"gcsp\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"gcsp\"","","\"","gcsp","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f4f461a58c8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f4f461a5828\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f4f461a4ec8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f4f461a5be8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f4f461a5b48\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f4f461a5a08\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f4f461a5968\u003e":"tag:\"gcsp\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f4f461a5968\u003e":"tag:\"gcsp\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":61277,"difficulty_rating":"medium-hard"}]}}