hdu 2187
题目大意:输入金钱数、大米的种类、各种大米的单价和体积(总公斤数),输出所能购买的大米的最大公斤数
解题思路:
1)先按单价排序。从小到大买。
2)这一道题与2111其实是差不多的。只不过前者是取价值最大的带走,现在是取价值最小的带走。
代码如下:
/* * 2187_1.cpp * * Created on: 2013年8月10日 * Author: Administrator */ #include <iostream> using namespace std; struct Node{ int price; int quality; }; bool compare(const Node& a , const Node& b){ return a.price < b.price; } int main(){ int t; scanf("%d",&t); while(t--){ int V , n; scanf("%d%d",&V,&n); Node ns[n]; int i; for( i = 0 ; i < n ; ++i){ scanf("%d%d",&ns[i].price,&ns[i].quality); } sort(ns,ns+n,compare); double sum = 0; for(i = 0 ;i < n && V>0;++i){ if(((double)V)/ns[i].price > ns[i].quality){ V -= ns[i].quality*ns[i].price; sum += ns[i].quality; }else{ sum += (double)V/ns[i].price; V= 0; } } printf("%.2lf\n",sum); } } /* * 2187_1.cpp * * Created on: 2013年8月10日 * Author: Administrator */ #include <iostream> using namespace std; struct Node{ int price; int quality; }; bool compare(const Node& a , const Node& b){ return a.price < b.price; } int main(){ int t; scanf("%d",&t); while(t--){ int V , n; scanf("%d%d",&V,&n); Node ns[n]; int i; for( i = 0 ; i < n ; ++i){ scanf("%d%d",&ns[i].price,&ns[i].quality); } sort(ns,ns+n,compare); double sum = 0; for(i = 0 ;i < n && V>0;++i){ if(((double)V)/ns[i].price > ns[i].quality){ V -= ns[i].quality*ns[i].price; sum += ns[i].quality; }else{ sum += (double)V/ns[i].price; V= 0; } } printf("%.2lf\n",sum); } }
补充:软件开发 , C++ ,