• B3624 猫粮规划(深度优先)


    #include 
    using namespace std;
    
    int n;
    int l,r;
    int w[45] = {0};
    int sum = 0;
    
    void dfs(int num,int weight){
    	if (num == n){
    		if (weight >= l && weight <= r){
    			sum++;
    		}
    		return;
    	}
    	
    	if (weight + w[num] <= r){
    		dfs(num+1,weight + w[num]);
    	}
    	dfs(num+1,weight);
    }
    int main()
    {
    	cin >> n>> l>> r;
    	for (int i = 0;i < n;i++){
    		cin>> w[i];
    	}
    	dfs(0,0);
    	cout << sum;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    猫粮规划

    题目描述

    到中午了,机器猫要吃猫粮了。

    机器猫掏出 n n n 份食物,第 i i i 份食物含有的能量为 w [ i ] w[i] w[i]。机器猫可以吃掉其中一些食物,获得这些食物的能量之和。

    机器猫又不想变得太胖又不想变得太瘦,所以指定了一个目标区间 [ l , r ] [l, r] [l,r]。显然,可能有很多种选择食物的方式可以达成这个目标,因此机器猫想知道方案总数。

    输入格式

    第一行,三个正整数 n , l , r n, l, r n,l,r

    第二行, n n n 个正整数,表示每一份食物含有的能量 w [ i ] w[i] w[i]

    输出格式

    仅一行,一个整数,表示方案数

    样例 #1

    样例输入 #1

    4 70 85
    10 10 20 50
    
    • 1
    • 2

    样例输出 #1

    4
    
    • 1

    提示

    样例解释

    所有方案如下:

    选择食物 1, 2, 4,能量 10+10+50 = 70
    选择食物 1, 3, 4,能量 10+20+50 = 80
    选择食物 2, 3, 4,能量 10+20+50 = 80
    选择食物 3, 4,能量 50+20 = 70

    共 4 种方案。

    数据规模与约定

    对于 50 % 50\% 50% 的数据,满足 n ≤ 20 n\leq 20 n20

    对于 100 % 100\% 100% 的数据,满足 n ≤ 40 , 20 ≤ w [ i ] ≤ 100 , l ≤ r ≤ 300 n\leq 40, 20\leq w[i] \leq 100, l\leq r \leq 300 n40,20w[i]100,lr300

    提示: w [ i ] w[i] w[i] 在范围内均匀随机生成。

  • 相关阅读:
    五张图带你理解 RocketMQ 顺序消息实现机制
    windows + excel 批量操作文件/文件夹
    零基础学Java(12)静态字段与静态方法
    mySql语句整理
    Windows系统使用powershell查找并删除重复文件
    HTTP协议
    七、Thymeleaf对象的访问
    Qt-OpenCV学习笔记--自适应阈值--adaptiveThreshold()
    leetcode725. 分隔链表(java)
    ProEasy机器人:运动+通讯相关说明
  • 原文地址:https://blog.csdn.net/Ltc3456/article/details/136764927