解题思路:
其实可以用类似深度优先搜索,每个节点就是一件物品,两条路通向下一个节点,即买与不买。
参考代码:
#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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复