1 solutions

  • 0
    @ 2026-1-17 11:17:47
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N =15;
    int arr[N][N];
    int cnt[N],cnt2[N],price=1e9;
    
    int main(){
    	int n,m,x;
    	cin>>n>>m>>x;
    	for(int i=1;i<=n;i++){
    		for(int j=0;j<=m;j++){
    			cin>>arr[i][j];
    		}
    	}
    	
    	//枚举子集-->检查是否有满足情况的子集-->选择花费最少的子集
    	for(int i=0;i<(1<<n);i++){
    		//用二进制表示每一种方案是否被选中
    		 memset(cnt,0,sizeof cnt);
    		 for(int j=n-1,k=1;j>=0;j--)cnt[k++]=(i>>j & 1);
    		
    		//枚举方案中的所有书籍,检查该方案能否满足条件
    		int p=0;
    		memset(cnt2,0,sizeof cnt2);
    		for(int j=1;j<=n;j++){
    			if(!cnt[j]) continue;
    			//统计该本书能增加的算法理解度
    			for(int k=1;k<=m;k++) cnt2[k]+=arr[j][k]; 
    			p+=arr[j][0];
    		} 
    		//检查
    		int j;
    		for(j=1;j<=m;j++) if(cnt2[j]<x) break;
    		if(j>m) price =min(price,p);  
    	} 
    	 if(price ==1e9) cout<<-1;
    	 else cout<<price;
    	
    	return 0;
    }
    

    Information

    ID
    2680
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    4
    Accepted
    3
    Uploaded By