1 solutions

  • 0
    @ 2026-1-29 10:56:47

    部分分

    #include<bits/stdc++.h>
    using namespace std;
    const int N=25;
    int v[N],w[N];
    int main()
    {
    	int n,V;
    	cin>>n>>V;
    	for(int i=0;i<n;i++)
    	{
    		cin>>v[i]>>w[i];
    	}
    	int res=1000000000;
    	for(int i=1;i<1<<n;i++)
    	{
    		bitset<32> a(i);
    		int sumv=0,sumw=0;
    		for(int j=0;j<n;j++)
    		{
    			if(a[j]==1)
    			{
    				sumv+=v[j];
    				sumw+=w[j];
    			}
    		}
    		if(sumw>=V)
    		{
    			res=min(res,sumv);
    		}
    	}
    	if(res==1000000000)
    	{
    		cout<<"no solution";
    	}
    	else
    	{
    		cout<<res;
    	}
    	return 0;
    }
    

    满分

    #include<bits/stdc++.h>
    using namespace std;
    const int N=510,M=1e6+10;
    int v[N],w[N];
    int f[M]; //f[i]=j,表示占用体积至少为i的时候最小花费为j 
    int main()
    {
    	int n,V;
    	cin>>n>>V;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>w[i]>>v[i]; 
    	}
    	memset(f,0x3f,sizeof f);
    	f[0]=0;//初始化
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=V;j>=0;j--) //枚举前i个物品的不同的体积 
    		{
    			f[j]=min(f[j],f[max(j-v[i],0)]+w[i]);	
    		}	
    	} 
    	if(f[V]==0x3f3f3f3f) //得不到 
    	{
    		cout<<"no solution"<<endl;
    	}
    	else
    	{
    		cout<<f[V];
    	}
    	return 0;
    }
    
    
    • 1

    Information

    ID
    2528
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    3
    Tags
    (None)
    # Submissions
    20
    Accepted
    4
    Uploaded By