解题思路:
其实可以用类似深度优先搜索,每个节点就是一件物品,两条路通向下一个节点,即买与不买。
参考代码:
#include<stdio.h>
int money[26];//每件物品的价格和价值分别存放在money[]和value[]中
int value[26];
int max_money;//他妈给的钱
int max_value;//总价值(最终答案)
int thingnum;//物品的数量
void initialize(){//初始化
scanf("%d%d",&max_money,&thingnum);
max_value=0;
for(int i=0;i<thingnum;i++)
scanf("%d%d",&money[i],&value[i]);
}
void DFS(int index,int sumV,int sumM){
if(index==thingnum)
return;
DFS(index+1,sumV,sumM);//当前不买物品,考虑下一件物品
if(sumM+money[index]<=max_money){//买当前这件物品之前,先考虑钱是否足够
if(sumV+value[index]*money[index]>max_value)
max_value=sumV+value[index]*money[index];//当购买本件商品的价值超过原来的价值时,更新价值
DFS(index+1,sumV+value[index]*money[index],sumM+money[index]);
}
}
int main(){
initialize();
DFS(0,0,0);
printf("%d\n",max_value);
return 0;
}
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1055 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:551 |
简单的a+b (C语言代码)浏览:827 |
简单的a+b (C语言代码)浏览:783 |
C语言训练-立方和不等式 (C语言代码)浏览:779 |
C语言程序设计教程(第三版)课后习题9.3 (Java代码)浏览:1025 |
拆分位数 (C语言代码)浏览:1361 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:716 |
用筛法求之N内的素数。 (C++代码)浏览:754 |