int INF=100; int n,m; int v[N]; long long suf[N]; int ans=INF; void dfs(int l,int sum,int cnt) { if(sum==m) { ans=min(ans,cnt); return; } if(l>=n||sum>m||cnt>=ans||sum+suf[1]<m)return; dfs(l+1,sum+v[l],cnt); dfs(l+1,sum+v[l]/2,cnt+1); dfs(l+1,sum,cnt); } int main() { cin>>n>>m; m*=2; for(int i=0;i<n;i++){ cin>>v[i]; v[i]*=2; } sort(v,v+n,greater<int>()); for(int i=n-1;i>=0;i--)suf[i]=suf[i+1]+v[i]; dfs(0,0,0); if(ans==INF)cout<<-1<<endl; else cout<<ans<<endl; return 0; }
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:586 |
C语言程序设计教程(第三版)课后习题8.2 (Java代码)浏览:2270 |
A+B for Input-Output Practice (C++代码)浏览:610 |
淘淘的名单 (C语言代码)答案错误???浏览:595 |
printf基础练习2 (C语言代码)浏览:777 |
【计算球体积】 (C语言代码)浏览:1113 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:550 |
母牛的故事 (C语言代码)浏览:946 |
Hello, world! (C语言代码)浏览:718 |
1126题解浏览:599 |