题目地址:http://ac.jobdu.com/problem.php?pid=1462
01背包
//如果打不开网址,可以直接百度搜索,题目类型是差不多的。
#include<stdio.h>
#include<string.h>
#define MAXS 5002
int list[102];
int dp[MAXS];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int i,j,c1,c2,sum,n;
while(~scanf("%d %d %d",&n,&c1,&c2))
{
sum=0;
memset(list,0,sizeof list);
memset(dp,0,sizeof dp);
for(i=1;i<=n;i++){scanf("%d",&list[i]);sum+=list[i];}
if(c1+c2<sum){puts("NO");continue;}
if(c1>c2){j=c1;c1=c2;c2=j;}
for(i=1;i<=n;i++)
{
for(j=c1;j>=list[i];j--)dp[j]=max(dp[j-list[i]]+list[i],dp[j]);
}
if(c2+dp[c1]<sum)puts("NO");
else puts("YES");
}
return 0;
}