例题一:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct goods{
double j;//该物品总重量
double f;//该商品总价格
double s;//性价比 一元可以买几斤
bool operator <(const goods &A) const {
return s>A.s;
}
}buf[1000];
int main(){
double m;
int n;
while(scanf("%lf%d",&m,&n)!=EOF){
if(m==-1&&n==-1) break;
for(int i=0;i<n;i++){
scanf("%lf%lf",&buf[i].j,&buf[i].f);
buf[i].s=buf[i].j/buf[i].f;
}
sort(buf,buf+n);
int idx=0;//当前物品下标
double ans=0;//累计所能买的总重量
while(m>0&&idx<n){
if(m>buf[idx].f){
ans+=buf[idx].j;
m-=buf[idx].f;
}
else
{
ans+=buf[idx].j*m/buf[idx].f;
m=0;
}
idx++;
}
printf("%.3lf\n",ans);
}
}
例题二:
解题思路:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct program{
int starttime;
int endtime;
bool operator < (const program &A) const{
return endtime<A.endtime;
}
}buf[100];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n==0) break;
for(int i=0;i<n;i++){
scanf("%d%d",&buf[i].starttime,&buf[i].endtime);
}
sort(buf,buf+n);//按照结束时间升序排序
int currenttime=0,ans=0;
for(int i=0;i<n;i++){
if(currenttime<=buf[i].starttime){
currenttime=buf[i].endtime;
ans++;
}
}
printf("%d\n",ans);
}
}