解题思路:
其实可以用类似深度优先搜索,每个节点就是一件物品,两条路通向下一个节点,即买与不买。

参考代码:

#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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论