装货物
装货物
https://ac.nowcoder.com/acm/problem/200532
#include <bits/stdc++.h> using namespace std; int n,x,w,kk,a[109],s[109],flag; bool com(int q,int w){ return q>w; } void dfs(int num,int g) { if( g>x||g>n ) return; if( num==n+1 ) { kk=1; return; } if( kk ) return; for(int i=1;i<=g;i++) { if( a[i]+s[num]<=w ) { a[i]+=s[num]; dfs(num+1,g); a[i]-=s[num]; } } a[g+1]=s[num]; dfs(num+1,g+1); a[g+1]=0; } int main() { int t; cin >> t; while( t-- ) { kk=0,flag=1; cin >> n >> x >> w; for(int i=1;i<=n;i++) { cin >> s[i]; if( s[i]>w ) flag=0; } if( !flag ) { cout << "No\n"; continue; } for(int i=1;i<=21;i++) a[i]=0; sort(s+1,s+1+n,com); a[1]=s[1]; dfs(2,1); if( kk||n==1 ) cout << "Yes\n"; else cout << "No\n"; } }