部分和问题 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 2 描述 给定整数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 来源 经典题目 上传者 TC_杨闯亮 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAX 10000 int num[MAX],dp[MAX]; int main() { int n; while(scanf("%d",&n)&&n!=-1) { for(int i=0;i<n;i++) { scanf("%d",&num[i]); dp[i]=1; } for(int i=1;i<n;i++) { for(int j=0;j<i;j++) { if(num[i]>num[j]&&dp[j]+1>dp[i]) //dpÊý×é¼Ç¼µ±Ç°µÄjÊôÓÚÄÄÒ»¸öµÝ¼õÊýÁУ¬×îºóÕÒ×î´óÖµ { dp[i]=dp[j]+1; } } } int maxx=0; for(int i=0;i<n;i++) { if(maxx<dp[i]) maxx=dp[i]; } printf("%d\n",maxx); } return 0; }