题目详见http://icpc.njust.edu.cn/Problem/Hdu/1009/
//背包问题:从小到大排序,先考虑性价比高的
#include<iostream>#include<algorithm>
using namespace std;
struct node{
double r;
int j;
int f;
}a[1000];
bool cmp(node x,node y)
{
return x.r<y.r;
}
int main()
{
int m,n;
while(cin>>m>>n)
{
if(m==-1&&n==-1) break;
double sum=0,pound=m;
for(int i=0;i<n;i++)
{
cin>>a[i].j >>a[i].f;
a[i].r=double(a[i].j)/a[i].f;
}
sort(a,a+n,cmp);
for(int i=n-1;i>=0&£>0;i--)
{
if(pound>=a[i].f){
sum+=a[i].j ;
pound=pound-a[i].f ;
}
else{
sum+=a[i].r*pound;
pound=0;
}
}
printf("%.3lf\n",sum); //lf:double
}
return 0;
}
printf()输出格式总结:printf(“格式控制字符串”, 输出表列)
1.格式替换符
%s
|
字符串
|
%f
|
浮点格式
|
%c
|
ASCII字符,即显示对应参数的第一个字符
|
%d,%i
|
十进制整数
|
%o
|
八进制值
|
%u
|
不带正负号的十进制值
|
%x
|
十六进制值(a-f)
|
%X
|
十六进制值(A-F)
|
%%
|
表示%本身
|
2.转义字符
\a
|
警告字符,通常为ASCII的BEL字符
|
\b
|
后退
|
\f
|
换页
|
\n
|
换行
|
\r
|
回车
|
\t
|
水平制表符
|
\v
|
垂直制表符
|
\\
|
表示\本身
|