题解:P15051 [UOI 2023 II Stage] Nova Poshta
我看题解里都是深搜,那我来一发暴力枚举。
题目分析
- 首先判断两辆车的载重量加起来有没有货物的总重量多,如果没有,那就肯定运不走了。
- 再判断每辆车的载重量是否均超过货物的总重量,如果有,那就是代表两个人都能运走。
- 接着判断每辆车的载重量是否超过货物的总重量,如果第一辆车超过就代表第一辆车能运走,第二辆车超过就代表第二辆车能运走。
- 到了合作这里,直接暴力枚举哪些货物在第一辆车上,哪些货物在第二辆车上,再判断是不是两辆车都能运走。
巨长无比的AC代码:
#include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int m1,m2,m3,m4,m5; cin >> m1 >> m2 >> m3 >> m4 >> m5; int M1,M2; cin >> M1 >> M2; int sum = m1 + m2 + m3 + m4 + m5; if (sum > M1 + M2) cout << "They can not do it!"; else if (M1 >= sum and M2 >= sum) cout << "They both can do it!"; else if (M1 >= sum and M2 < sum) cout << "Vasyl can do it!"; else if (M2 >= sum and M1 < sum) cout << "Petro can do it!"; else{ cout << "They need to work together!\n"; if (M1 >= m1 and M2 >= sum - m1) cout << "Vasyl: 1\nPetro: 2 3 4 5"; else if (M1 >= m2 and M2 >= sum - m2) cout << "Vasyl: 2\nPetro: 1 3 4 5"; else if (M1 >= m3 and M2 >= sum - m3) cout << "Vasyl: 3\nPetro: 1 2 4 5"; else if (M1 >= m4 and M2 >= sum - m4) cout << "Vasyl: 4\nPetro: 1 2 3 5"; else if (M1 >= m5 and M2 >= sum - m5) cout << "Vasyl: 5\nPetro: 1 2 3 4"; else if (M1 >= m1 + m2 and M2 >= sum - m1 - m2) cout << "Vasyl: 1 2\nPetro: 3 4 5"; else if (M1 >= m1 + m3 and M2 >= sum - m1 - m3) cout << "Vasyl: 1 3\nPetro: 2 4 5"; else if (M1 >= m1 + m4 and M2 >= sum - m1 - m4) cout << "Vasyl: 1 4\nPetro: 2 3 5"; else if (M1 >= m1 + m5 and M2 >= sum - m1 - m5) cout << "Vasyl: 1 5\nPetro: 2 3 4"; else if (M1 >= m1 + m2 + m3 and M2 >= m4 + m5) cout << "Vasyl: 1 2 3\nPetro: 4 5"; else if (M1 >= m1 + m2 + m4 and M2 >= m3 + m5) cout << "Vasyl: 1 2 4\nPetro: 3 5"; else if (M1 >= m1 + m2 + m5 and M2 >= m3 + m4) cout << "Vasyl: 1 2 5\nPetro: 3 4"; else if (M1 >= m1 + m3 + m4 and M2 >= m2 + m5) cout << "Vasyl: 1 3 4\nPetro: 2 5"; else if (M1 >= m1 + m3 + m5 and M2 >= m2 + m4) cout << "Vasyl: 1 3 5\nPetro: 2 4"; else if (M1 >= m1 + m4 + m5 and M2 >= m2 + m3) cout << "Vasyl: 1 4 5\nPetro: 2 3"; else if (M1 >= m1 + m2 + m3 + m4 and M2 >= m5) cout << "Vasyl: 1 2 3 4\nPetro: 5"; else if (M1 >= m1 + m2 + m3 + m5 and M2 >= m4) cout << "Vasyl: 1 2 3 5\nPetro: 4"; else if (M1 >= m1 + m2 + m4 + m5 and M2 >= m3) cout << "Vasyl: 1 2 4 5\nPetro: 3"; else if (M1 >= m1 + m3 + m4 + m5 and M2 >= m2) cout << "Vasyl: 1 3 4 5\nPetro: 2"; else if (M1 >= m2 + m3 and M2 >= sum - m2 - m3) cout << "Vasyl: 2 3\nPetro: 1 4 5"; else if (M1 >= m2 + m4 and M2 >= sum - m2 - m4) cout << "Vasyl: 2 4\nPetro: 1 3 5"; else if (M1 >= m2 + m5 and M2 >= sum - m2 - m5) cout << "Vasyl: 2 5\nPetro: 1 3 4"; else if (M1 >= m2 + m3 + m4 and M2 >= m1 + m5) cout << "Vasyl: 2 3 4\nPetro: 1 5"; else if (M1 >= m2 + m3 + m5 and M2 >= m1 + m4) cout << "Vasyl: 2 3 5\nPetro: 1 4"; else if (M1 >= m2 + m4 + m5 and M2 >= m1 + m3) cout << "Vasyl: 2 4 5\nPetro: 1 3"; else if (M1 >= m2 + m3 + m4 + m5 and M2 >= m1) cout << "Vasyl: 2 3 4 5\nPetro: 1"; else if (M1 >= m3 + m4 and M2 >= sum - m3 - m4) cout << "Vasyl: 3 4\nPetro: 1 2 5"; else if (M1 >= m3 + m5 and M2 >= sum - m3 - m5) cout << "Vasyl: 3 5\nPetro: 1 2 4"; else if (M1 >= m3 + m4 + m5 and M2 >= m1 + m2) cout << "Vasyl: 3 4 5\nPetro: 1 2"; else if (M1 >= m4 + m5 and M2 >= sum - m4 - m5) cout << "Vasyl: 4 5\nPetro: 1 2 3"; } return 0; }