4 条题解

  • 1
    @ 2025-7-18 19:55:58
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int MAXN = 114514;
    int n,w,ans,c[MAXN],cab[MAXN];
    void dfs(int now,int cnt) {
    	if (cnt >= ans) {
    		return ;
    	}
    	if (now == n + 1) {
    		ans = min(ans,cnt);
    		return ;
    	}
    	for (int i = 1;i <= cnt;i++) {
    		if (cab[i] + c[now] <= w) {
    			cab[i] += c[now];
    			dfs(now + 1,cnt); 
    			cab[i] -= c[now];
    		}
    	}
    	cab[cnt + 1] = c[now];
    	dfs(now + 1,cnt + 1);
    	cab[cnt + 1] = 0;
    }
    int main() {
    	cin >> n >> w;
    	for (int i = 1;i <= n;i++) {
    		cin >> c[i];
    	}
    	sort(c + 1,c + n + 1);
    	reverse(c + 1,c + n + 1);
    	ans = n;
    	dfs(1,0);
    	cout << ans << endl;
    	return 0;
    }
    

    信息

    ID
    76
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    410
    已通过
    100
    上传者