Есть действительно три условия, которые существуют.
Если у вас есть проверка, а это означает, что пользователь должен установить флажок, то вы можете отказаться от первого условия. Исходя из этого, можно определить, когда пользователь выбрал ящик, что он выбрал, зная состояние только одного из ящиков. Поэтому, если у вас есть кнопка, которая проверяет валидацию, вы можете сделать что-то вроде этого.
<Button
title={'check married status'}
onPress={() => {
if (!this.state.single && !this.state.married) {
alert('Please check a box)
} else {
// we only need to check one of them
let marriedStatus = this.state.married ? 'married' : 'single';
alert(`You are ${marriedStatus}`)
// then you can do what you want with the marriedStatus here
}
}}
/>
Я должен был сделать эту самую вещь, которую Вы описываете.
Это - код Python, который я использовал, это - рецепт в Поваренной книге Python:
Рецепт 442299: упакуйте повторные изображения различных размеров в одно изображение
Вашу проблему в 1D называют Упаковкой Мусорного ведра. Возможно, это - хорошее начало для Вашего поиска.
Примечание, которое проблему Вы хотите решить, действительно твердо (это является NP-трудным). Таким образом, Вы не должны искать оптимальное решение, но некоторый умный heuristical алгоритм.
я думаю, что восходящее динамическое программирование возможно для 1D упаковка мусорного ведра, но не для 2D случая.
Вы могли думать об упрощении Вашей проблемы, только решая 1D проблема, делая ограничения как вырезание структур в несколько (переменная измеренный) части в 1 размере.
Другая возможность выполняет метаэвристическую оптимизацию на нем, как Эволюционные Алгоритмы или Оптимизация Роя Частицы.