Untitled
unknown
plain_text
a year ago
3.0 kB
2
Indexable
Never
#include<iostream> using namespace std; const int MAX_ITEM_NUM = 100; int main() { bool isFirst = true; int itemNum, capacity = 0; int weight[MAX_ITEM_NUM] = {0}; int value[MAX_ITEM_NUM] = {0}; int weightSum = 0; int valueSum = 0; int item[MAX_ITEM_NUM] = {0}; cin >> itemNum >> capacity; for(int i = 0; i < itemNum; i++) { item[i] = 1; } for(int i = 0; i < itemNum; i++) { cin >> weight[i]; if(weight[i] > capacity) { item[i] = 0; } if(item[i] != 0) { weightSum += weight[i]; } } for(int i = 0; i < itemNum; i++) { cin >> value[i]; } if(weightSum == 0) { cout << ";" << 0; return 0; } if(weightSum <= capacity) { for(int i = 0; i < itemNum; i++) { if(item[i] == 1) { if(isFirst == true) { isFirst = false; } else { cout << ","; } cout << i + 1; valueSum += value[i]; } } cout << ";" << valueSum; return 0; } while(true) { int lowestValue = 1000; int alsoLowestValue = 1000; int target1 = -5; int target2 = -5; for(int i = 0; i < itemNum; i++) { if(item[i] == 1) { if(weightSum - weight[i] <= capacity) { if(lowestValue > value[i]) { lowestValue = value[i]; target1 = i; } } } } if(target1 != -5) { item[target1] = 0; for(int i = 0; i < itemNum; i++) { if(item[i] == 1) { if(isFirst == true) { isFirst = false; } else { cout << ","; } cout << i + 1; valueSum += value[i]; } } cout << ";" << valueSum; break; } for(int i = 0; i < itemNum; i++) { if(item[i] == 1) { if(weightSum - weight[i] > capacity) { if(alsoLowestValue > value[i]) { alsoLowestValue = value[i]; target2 = i; } } } } if(target2 != -5) { item[target2] = 0; } } return 0; }