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语言训练-排序问题<1> (C语言代码)浏览:1351 |
大神老白 (C语言代码)浏览:715 |
C语言程序设计教程(第三版)课后习题7.4 (Java代码)浏览:844 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:782 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2081 |
WU-整数平均值 (C++代码)浏览:1245 |
The 3n + 1 problem (C语言代码)浏览:554 |
K-进制数 (C语言描述,蓝桥杯)浏览:925 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1466 |
剪刀石头布 (C++代码)浏览:1713 |