正解会,但是用多重背包应该咋写qwq
查看原帖
正解会,但是用多重背包应该咋写qwq
432491
ThinkLongLong楼主2023/10/30 15:54

这是我错的很显然的多重背包,有dalao知道应该咋改吗orz
(菜到连多重背包求方案数都不会qwq)

#include<bits/stdc++.h>
using namespace std;
typedef long long lol;
int c[5],n;
int d[5],m;
int f[1000005];
int main(){
    for(int i=1;i<=4;i++)
        scanf("%d",&c[i]);
    cin>>n;
    while(n--){
        for(int i=1;i<=4;i++)
            scanf("%d",&d[i]);
        cin>>m;
        memset(f,0,sizeof f);
        f[0]=1;
        for(int i=1;i<=4;i++){
            int tmp=d[i];
            for(int k=1;tmp;k<<=1){
                int x=min(k,tmp);tmp-=x;
                for(int j=m;j>=x*c[i];j--){
                    f[j]+=f[j-x*c[i]];
                }
            }
            //for(int j=1;j<=m;j++)
            //    cout<<f[j]<<' ';cout<<endl;
        }
        cout<<f[m]<<endl;
    }
}
2023/10/30 15:54
加载中...