1 solutions

  • 0
    @ 2026-3-12 18:57:23
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int m,n,k;
    	cin>>m>>n>>k;
    	vector<int> a(n),b(n);
    	for(int i=0;i<n;i++) cin>>a[i];
    	for(int i=0;i<n;i++) cin>>b[i];
    	int ans=-1;//初始化题目数量
    	for(int i=0;i<1<<n;i++)
    	{
    		vector<int> sum(m+1,0);
    		int cnt=0;
    		bitset<32> aa(i);
    		for(int j=0;j<n;j++) //统计个数和分数
    		{
    			if(aa[j]==1)
    			{
    				cnt++;
    				sum[a[j]]+=b[j];
    			}
    		}
    		bool st=true;
    		for(int j=1;j<=m;j++)
    		{
    			if(sum[j]<k)
    			{
    				st=false;
    				break;
    			}
    		}
    		if(st==false) continue;
    		bool st2=true;
    		int last=-1;
    		for(int j=0;j<n;j++)
    		{
    			if(aa[j]==1)
    			{
    				if(a[j]==last)
    				{
    					st2=false; //出现选择相同的
    					break;
    				}	
    				last=a[j];//更新上一个
    			}
    		
    		}
    		if(st2==false) continue;
    		if(ans==-1||cnt<ans)
    		{
    			ans=cnt;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    Information

    ID
    2204
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    40
    Accepted
    1
    Uploaded By