8 条题解

  • -3
    @ 2023-4-10 21:49:28

    P1725 0/1背包问题

    本人的第n篇题解

    这题很简单,用dfs就搞定了!

    代码:

    #include<iostream>
    using namespace std;
    int m,n,sumw,sumc,maxnc;//sumw:用来记录重量的总和,sumc:用来记录价值的总和,maxnc:用来记录最大的总和 
    bool b[1000000]={0};
    struct s{
    	int w,c;//w表示重量,c表示价值 
    } a[1000000]={0};
    void dfs(int x){
    	for(int i=x;i<=n;i++){
    		if(sumw+a[i].w<=m&&b[i]==0){//判断sumw+这个魔法石的重量会不会超出背包重量,还要判断有没有算过 
    			sumw+=a[i].w;//加上重量 
    			sumc+=a[i].c;//加上价值 
    			b[i]=1;//算过了 
    			dfs(i);
    			b[i]=0;//还原 
    			sumw-=a[i].w;
    			sumc-=a[i].c;
    		} 
    	}
    	maxnc=max(sumc,maxnc);//比较最大的 
    	return;
    }
    int main(){
    	cin>>m>>n; 
    	for(int i=1;i<=n;i++) cin>>a[i].w>>a[i].c;//输入数字 
    	dfs(1);
    	cout<<maxnc;//输出 
    	return 0;
    }
    

    制作不易,点个赞再走吧。

    信息

    ID
    1725
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    234
    已通过
    85
    上传者