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", что означает, что гири можно разложить поровну.
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”.
Входные данные
4
4 2 3 1
Результат работы
YES