3 条题解
-
0
dfs(c++11)
#include <iostream> #include <cstring> #include <algorithm> using namespace std; #define int long long const int N=45; int cnt,res,n,m,a[N]; bool vis[N]; inline void dfs(int x) { if(res==m) return ; for(register int i=1;i<=n;++i) { if(!vis[i] && cnt+a[i]<=m) { cnt+=a[i]; vis[i]=true; res=max(res,cnt); dfs(x+1); cnt-=a[i]; vis[i]=false; } } } signed main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m; for(register int i=1;i<=n;++i) cin>>a[i],cnt+=a[i]; if(cnt<=m) return cout<<cnt<<endl,0; cnt=0; sort(a+1,a+1+n,[&] (int x,int y){ return x>y; });//从大到小排序 dfs(1); cout<<res; return 0; }
- 1
信息
- ID
- 136
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 107
- 已通过
- 31
- 上传者