Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++ ПРОШУ ПОМОГИТЕ ПОЖАЛУЙСТА

Лейла Нуриева Ученик (90), открыт 1 неделю назад
Дан набор гирек массой m1, . . . , mn. Можно ли их разложить на две чаши весов таким образом, чтобы они оказались в равновесии?
Входные данные

4
4 2 3 1
Результат работы

YES
2 ответа
Rubin Гуру (2914) 1 неделю назад
```cpp
#include <iostream>
#include <vector>
#include <numeric>
bool canBalanceWeights(const std::vector<int>& weights) {
int totalWeight = std::accumulate(weights.begin(), weights.end(), 0);
if (totalWeight % 2 != 0) return false; // Если общий вес нечетный, разделить поровну невозможно
std::vector<bool> dp(totalWeight / 2 + 1, false);
dp[0] = true; // Начальное состояние: вес 0 всегда достижим
for (int weight : weights) {
for (int i = totalWeight / 2; i >= weight; --i) {
if (dp[i - weight]) dp[i] = true;
}
}

return dp[totalWeight / 2];
}
int main() {
std::vector<int> weights = {4, 2, 3, 1};
std::cout << (canBalanceWeights(weights) ? "YES" : "NO") << std::endl;
return 0;
}
```
Этот код на C++ проверяет, можно ли разложить набор гирек на две чаши весов так, чтобы они оказались в равновесии. Если ввести данные `4 2 3 1`, результат работы программы будет "YES", что означает, что гири можно разложить поровну.
Лейла НуриеваУченик (90) 1 неделю назад
а можете пожалуйста с любой последовательностью код написать пожалуйста прошу
Rubin Гуру (2914) Лейла Нуриева, пример кода на C++, который проверяет, можно ли разложить набор гирек на две чаши весов так, чтобы они оказались в равновесии. Я использую другую последовательность гирек для демонстрации:
RubinГуру (2914) 1 неделю назад
#include <iostream>
#include <vector>
#include <numeric>
bool canBalanceWeights(const std::vector<int>& weights) {
int totalWeight = std::accumulate(weights.begin(), weights.end(), 0);
if (totalWeight % 2 != 0) return false; // Если общий вес нечетный, разделить поровну невозможно
std::vector<bool> dp(totalWeight / 2 + 1, false);
dp[0] = true; // Начальное состояние: вес 0 всегда достижим
for (int weight : weights) {
for (int i = totalWeight / 2; i >= weight; --i) {
if (dp[i - weight]) dp[i] = true;
}
}
return dp[totalWeight / 2];
}
int main() {
std::vector<int> weights = {5, 3, 9, 7}; // Новая последовательность гирек
std::cout << (canBalanceWeights(weights) ? "YES" : "NO") << std::endl;
return 0;
}
RubinГуру (2914) 1 неделю назад
В этом примере используется последовательность гирек {5, 3, 9, 7}. Программа проверяет, можно ли разложить эти гири так, чтобы весы были в равновесии. Если общий вес можно разделить поровну, программа выведет “YES”, иначе “NO”.
Лейла НуриеваУченик (90) 1 неделю назад
а можете так с любой последовательностью прошу помогите
Похожие вопросы