圣诞老人的礼物-Santa Clau’s Gifts

描述

圣诞节来临了,在城市A中圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿最多只能承受一定重量的糖果,请问圣诞老人最多能带走多大价值的糖果。

输入第一行由两个部分组成,分别为糖果箱数正整数n(1 <= n <= 100),驯鹿能承受的最大重量正整数w(0 < w < 10000),两个数用空格隔开。其余n行每行对应一箱糖果,由两部分组成,分别为一箱糖果的价值正整数v和重量正整数w,中间用空格隔开。输出输出圣诞老人能带走的糖果的最大总价值,保留1位小数。输出为一行,以换行符结束。样例输入
4 15
100 4
412 8
266 7
591 2
样例输出
1193.0



#include<stdio.h>

int n,C,w[10],s[10],Q,temp;
float v[10],aver[10],select,V=0.0;

void main(){
 printf("请输入糖果箱数\n");
 scanf("%d",&n);

 printf("请输入最大承重量\n");
 scanf("%d",&C);
 
 for(int i=0;i<n;i++){
  s[i]=0;
  printf("请输入第%d种糖果价值\n",i+1);
     scanf("%f",&v[i]);
  printf("请输入第%d种糖果重量\n",i+1);
     scanf("%d",&w[i]);
  aver[i]=v[i]/w[i]; 
  //printf("%f\n",aver[i]);
 }
 
 for(int j=0;j<n;j++){
   for(int k=0;k<n;k++){
    if(aver[k]>select&&s[k]==0){
     select=aver[k];
     temp=k;
    }
   }
   if(w[temp]<C){
    V=V+v[temp];
    C=C-w[temp];
    s[temp]=1;
   }
   else{
    V=V+aver[temp]*C;
    C=0;
    s[temp]=1;
    break;
   } 
   select=0.0;
 }

 for(int b=0;b<n;b++)
   printf("%d",s[b]);
 printf("\n%.1f\n",V);
}



猜你喜欢

转载自blog.csdn.net/sapphireirene/article/details/45773045
今日推荐