NYOJ 1221 找數達人

找數達人

時間限制:1000 ms  |  內存限制:65535 KB
難度:2
描述

小明最近做出了一道題:如何在一組數中尋找三個數,這三個數的和等於一給出的定值m,洋洋得意。於是小華不樂意了,小華說,你能找找在一組數字中是否有n個數,使得這n個數的和等於一給定的定值m嗎?

 1.0 < 數字大小 <= 1000

 2. 0 < 序列中數字個數 <= 1000

 3. 0 <= m <=1000

輸入
多組數據,每組兩行,第一行爲序列內容,第二行爲m的值。
輸出
如能找到,輸出Yes,否則,輸出No。
樣例輸入
1 3 4 5
5
1 3 4 5 9
2
樣例輸出
Yes
No
思路:一個簡單的01揹包問題,就是能否把容量爲m的揹包裝滿。
#include<stdio.h>
#include<string.h>
#define Max(a,b) a>b?a:b
int dp[10000];
int num[10000];
int main()
{
	int n,m;
	int count=0;
    char c;
	while(scanf("%d%c",&n,&c)!=EOF)
	{
		count=0;
		num[count++]=n;
		while(scanf("%d%c",&n,&c))
		{
			num[count++]=n;
			if(c=='\n') break;
		}
		
	   memset(dp,0,sizeof(dp));
	   scanf("%d",&m);
	   for(int i=0;i<count;i++)
	   {
	     	for(int j=m;j>=num[i];j--)
		   {
		    	dp[j]=Max(dp[j],dp[j-num[i]]+num[i]);
		   }
	   }
//	    for(int i=1;i<=m;i++) printf("%d ",dp[i]);
//	    printf(" #\n");
       if(dp[m]==m) printf("Yes\n");
       else printf("No\n");
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章