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语言代码)浏览:4040 |
C语言程序设计教程(第三版)课后习题7.4 (C++代码)(和输入10个数排序没有区别,直接sort即可)浏览:2138 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:287 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
DNA (C语言描述,蓝桥杯)浏览:1653 |
1024题解浏览:879 |
字符串输入输出函数 (C语言代码)浏览:2604 |
C语言程序设计教程(第三版)课后习题12.2 (C语言代码)浏览:839 |
第三届阿里中间件性能挑战赛-总决赛亚军比赛攻略浏览:1170 |
矩阵的对角线之和 (C语言代码)浏览:1401 |