使用貪心按照性價比排序即可,唯一需要注意的就是它的輸出格式。
The outputs of two consecutive cases will be separated by a blank line.
#include<iostream> #include<algorithm> using namespace std; struct Node{ int index; //每雙鞋子的索引 double time; double fine; double cost; //性價比 }; Node test[1001]; bool cmp(const Node& node1,const Node& node2); int main() { int testNumber; cin>>testNumber; for(int i=1;i<=testNumber;i++) //測試的數目 { int shoseNumber; cin>>shoseNumber; for(int j=0;j<shoseNumber;j++) //獲取輸入 { cin>>test[j].time; cin>>test[j].fine; test[j].index=j+1; //計算性價比 test[j].cost=test[j].fine/test[j].time; } sort(test,test+shoseNumber,cmp); for(int h=0;h<shoseNumber-1;h++) cout<<test[h].index<<" "; cout<<test[shoseNumber-1].index<<endl; if(i!=testNumber) cout<<endl; } return 0; } bool cmp(const Node& node1,const Node& node2) { if(node1.cost!=node2.cost) return node1.cost>node2.cost; else return node1.cost<node2.cost; } #include<iostream> #include<algorithm> using namespace std; struct Node{ int index; //每雙鞋子的索引 double time; double fine; double cost; //性價比 }; Node test[1001]; bool cmp(const Node& node1,const Node& node2); int main() { int testNumber; cin>>testNumber; for(int i=1;i<=testNumber;i++) //測試的數目 { int shoseNumber; cin>>shoseNumber; for(int j=0;j<shoseNumber;j++) //獲取輸入 { cin>>test[j].time; cin>>test[j].fine; test[j].index=j+1; //計算性價比 test[j].cost=test[j].fine/test[j].time; } sort(test,test+shoseNumber,cmp); for(int h=0;h<shoseNumber-1;h++) cout<<test[h].index<<" "; cout<<test[shoseNumber-1].index<<endl; if(i!=testNumber) cout<<endl; } return 0; } bool cmp(const Node& node1,const Node& node2) { if(node1.cost!=node2.cost) return node1.cost>node2.cost; else return node1.cost<node2.cost; }