6 solutions

  • 5
    @ 2024-7-19 11:19:13
    #include<bits/stdc++.h>
    using namespace std;
    const int N=25;
    int w[N],ans=-1,n,m;
    void dfs(int u,int s)
    {
    	if(u==n+1)
    	{
    		if(s<=m)ans=max(ans,s);
    		return;
    	}
    	dfs(u+1,s);
    	dfs(u+1,s+w[u]);	
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)scanf("%d",&w[i]);
    	dfs(1,0);
    	printf("%d",ans);
    	return 0;
    }
    
    • 3
      @ 2025-7-24 10:21:50
      #include<bits/stdc++.h>
      using namespace std;
      const int N=25;
      int w[N],ans=-1,n,m;
      void dfs(int u,int s)
      {
      	if(u==n+1)
      	{
      		if(s<=m)ans=max(ans,s);
      		return;
      	}
      	dfs(u+1,s);
      	dfs(u+1,s+w[u]);	
      }
      int main()
      {
      	cin>>n>>m;
      	for(int i=1;i<=n;i++)scanf("%d",&w[i]);
      	dfs(1,0);
      	printf("%d",ans);
      	return 0;
      }
      
      
      • 2
        @ 2026-1-19 16:37:42
        #include<bits/stdc++.h>
        using namespace std;
        const int N=25;
        int w[N];
        int main()
        {
        	int n,m;
        	cin>>n>>m;
        	for(int i=0;i<n;i++)
        	{
        		cin>>w[i];
        	}
        	int res=0;
        	for(int i=0;i<1<<n;i++)
        	{
        		bitset<32> a(i); //将i转换成二进制存到a里面
        		int money=0;
        		for(int j=0;j<n;j++)
        		{
        			if(a[j]==1) //选了
        			{
        				money+=w[j];
        			}
        		}
        		if(money<=m)
        		{
        			res=max(res,money);
        		}
        	}
        	cout<<res;
        	return 0;
        }
        
        • 1
          @ 2026-2-26 16:03:12

          枚举子集写法:

          #include<bits/stdc++.h>
          using namespace std;
          const int N=25;
          int v[N]; 
          int main(){
          	int n,V;
          	cin>>n>>V;
          	for(int i=0;i<n;i++){
          		cin>>v[i];
          	}
          	int res=0;
          	for(int i=1;i<1<<n;i++){
          		int s=0;
          		for(int j=0;j<n;j++){
          			if(i>>j&1){
          				s+=v[j];
          			}
          		}
          		if(s<=V){
          			res=max(res,s);
          		}
          	}
          	cout<<res;
          	return 0;
          }
          
          • -4
            @ 2025-1-11 15:09:36
            #include<bits/stdc++.h>
            using namespace std;
            const int N=15;
            int n,m;
            int w[N];
            int ans=1;
            void dfs(int u,int s)
            {
            	if(u==n)
            	{
            		if(s<m)
            		{
            			s=min(s,ans);
            		}
            		return s;
            	}
            	dfs(u,s);
            	dfs(u+1,s+w[i]);
            }
            int main()
            {
            	cin>>m>>n;
            	for(int i=0;i<n;i++)
            	{
            		cin>>w[i];
            	}
            	cout<<dfs();
                return 0;
            }
            
            
            • -5
              @ 2024-7-9 10:16:50

              好吧,我再来一次。

              #include<bits/stdc++.h>
              using namespace std;
              const int N=25;
              int w[N],ans=-1,n,m;
              void dfs(int u,int s)
              {
              	if(u==n+1)
              	{
              		if(s<=m)ans=max(ans,s);
              		return                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    																																																																																																																																																																																																																																																																																																																																																																					;
              	}
              	dfs(u+1,s);
              	dfs(u+1,s+w[u]);	
              }
              int main()
              {
              	cin>>n>>m;
              	for(int i=1;i<=n;i++)scanf("%d",&w[i]);
              	dfs(1,0);
              	printf("%d",ans);
              	return 0;
              }
              
              • 1

              Information

              ID
              229
              Time
              1000ms
              Memory
              256MiB
              Difficulty
              3
              Tags
              # Submissions
              79
              Accepted
              22
              Uploaded By