航电OJ1.3.5答案,没用#include
因为学习尚浅,还不会用#include ;
话不多说,直接开始,biu~
贪心策略,把最贵的物品先装,当只有单位体积的不用分隔开,当大于二包括二的贵的宝贝隔开;
思路:定义大于100的结构体数组,每个结构体数组即一种宝物;从键盘录入每种宝物的信息;然后按照价值的高低进行排序;再偷偷的装入袋子里面;
注意一种情况:当袋子的容量大于所有宝物的数量的情况;
上代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct baobei
{
int danjia;
int tiji;
} stu;
int main()
{
stu e[110];
stu a;
int sum=0;
int v,t;
while(scanf("%d",&v)&&v!=0)
{
int stp=0;
sum=0;
scanf("%d",&t);
int j=0;
while(j<t)
{
scanf("%d%d",&e[j].danjia,&e[j].tiji);
stp+=e[j].tiji;//录入信息的同时计算宝物的总数;
j++;
}
for(int i=0; i<t-1; i++)
{
for(int z=i+1; z<t; z++)
{
if(e[i].danjia<e[z].danjia)
{
a=e[i];
e[i]=e[z];
e[z]=a;
}
}
}
int k=0;
for(int i=1; i<=v; i++)
{
if(i<=stp)//上面提到的要特别注意的情况
{
sum+=e[k].danjia;
e[k].tiji--;
if(e[k].tiji==0)
{
k++;
}
}
else break;
}
printf("%d\n",sum);
}
return 0;
}
新手上路,哈哈哈哈哈;