题解 | #选择困难症#

选择困难症

https://ac.nowcoder.com/acm/problem/13594

我只想到了朴素方法,膜拜楼下大佬的剪枝思路,蛮快的。

if(res>m){
        ll re=1;
        for(int j = i;j<k;j++){
            re*=(asize[j]+1);//注意加上没有拿该物品的情况
        }
        ans+=re;
        return;
    }
#include<cstring>
const int N = 1e9 + 7;
using namespace std;
typedef long long ll;
ll m,k,ans = 0;
ll a[110][110],asize[10];
void dfs(int i,ll res){
    if(res>m){
        ll re=1;
        for(int j = i;j<k;j++){
            re*=(asize[j]+1);//注意加上没有拿该物品的情况
        }
        ans+=re;
        return;
    }
    if(i ==k) return;
    for(int j =0;j<=asize[i];j++){
        dfs(i+1,res+a[i][j]);
    }
}
int main(){
    while(cin >> k >> m){
        ans =0;
        memset(a,0,sizeof(a));
        for(int i =0;i<k;i++){
            cin >>asize[i];
            for(int j =1;j<=asize[i];j++){
                cin >> a[i][j];
            }
        }
        dfs(0,0);
        cout<< ans<<endl;
    }
    return 0;
}
全部评论

相关推荐

码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务