题解 | #神奇的口袋#

神奇的口袋

https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35

#include <iostream>
using namespace std;

int v[21];

int judge(int index,int remain){
    if(remain == 0) return 1; //成功
    if(index <= 0) return 0; //下標無效,捨棄
    return judge(index-1,remain) + judge(index-1, remain - v[index]);
    /*
    從第n個物品往前取。試探性取第index個物品,如果不行會返回0.
    取了第index個物品後,如果剩餘體積remain仍然大於0,代表沒有取淨,還可以繼續取,這個時候再試試取第index-1個物品也就是前一個物品。
    如果等於0,代表取淨,本次算法結束,次數+1。
    */
}

int main() {
    int n ,i;
    cin >> n;

    for(i = 1; i <= n ; i ++ ){
        cin >> v[i];
    } //物品從下標1開始存放於v[]

    cout << judge(n, 40) << endl;

    return 0;
}

全部评论

相关推荐

昨天 11:40
海南大学 Java
点赞 评论 收藏
分享
牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务