题目详见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 | 垂直制表符 |
\\ | 表示\本身 |