部分和问题
来源:互联网 发布:信广立诚贷之家数据 编辑:程序博客网 时间:2024/06/14 00:35
D : 部分和问题
时间限制:1 Sec 内存限制:64 MiB
题目描述
给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。
输入
首先,n和k,n表示数的个数,k表示数的和。
接着一行n个数。
(1<=n<=20,保证不超int范围)
输出
如果和恰好可以为k,输出“YES”,并按输入顺序依次输出是由哪几个数的和组成,否则“NO”
样例输入
4 13
1 2 4 7
样例输出
YES
2 4 7
#include <stdio.h>int a[1000],b[1000];int step,i,n,k;int f(int x,int sum){ if(k<sum) return 0;/*判断有没有超出*/ if(k==sum) return 1; if(x==n) return 0; if(f(x+1,sum)) return 1; if(f(x+1,sum+a[x])) {/*这上下步就是这题精髓要首先下面代表跳过一位后开始搜,上面是继续往下搜*/ b[step++]=a[x]; return 1; }}int main(){ while(~scanf("%d%d",&n,&k)) { step=0; for (i = 0;i<n;i++) scanf("%d",&a[i]); if(f(0,0)) { printf("YES\n"); for(i = step-1;i>0;i--) { printf("%d ",b[i]); } printf("%d\n",b[0]); } else printf("NO\n"); }}/*这应该这样想,每一步搜一次两个支线的跑*/
阅读全文
2 0
- DFS 部分和问题
- 部分和问题
- 多重部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- nyoj 部分和问题
- nyoj-部分和问题
- nyoj1058部分和问题
- 部分和问题
- nyoj 部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- 多重部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- 昂贵的聘礼 POJ
- Android——RecyclerView——Adapter完全图解,带你彻底掌握万能的适配器
- 【Scikit-Learn 中文文档】随机投影
- java--spring boot微信支付服务端实现含代码(app支付、扫码支付等)
- Android中插件开发篇总结和概述
- 部分和问题
- 【Scikit-Learn 中文文档】内核近似
- 解决linux中vi编辑出现乱码的问题
- 第04次上机作业所有源代码
- 160个破解练习之CrackMe 007
- Android滑动实现开关
- leetcode 371. Sum of Two Integers
- 【Scikit-Learn 中文文档】成对的矩阵, 类别和核函数
- 走进编程的渴望