死亡伯爵


私信TA

用户名:1124615130

访问量:20174

签 名:

Life is not what we have gained but what we have done.

等  级
排  名 885
经  验 3544
参赛次数 1
文章发表 33
年  龄 19
在职情况 学生
学  校 XiDianUniversity
专  业 ComputerScience

  自我简介:

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

参考代码:

#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 人评分

  评论区

  • «
  • »