您的位置:首页 > 其它

多重部分和问题

2016-08-05 14:52 232 查看
/*1149: 多重部分和问题

时间限制: 1 Sec  内存限制: 128 MB

提交: 25  解决: 6

[提交][状态][讨论版]

题目描述

有n中不同大小的数字ai,每种各mi个。判断是否可以从这些数字之中选出若干使他们的大小恰好为K.

限制条件

1<=n<=100

 1<=ai,mi<=100000

 1<=k<=100000

输入

多组数据。

 第一行n。第二行不同的数字ai.第三行对应数字拥有的个数

输出

能挑选若干恰好和为K则输出“Yes”,反之输出“No”.

样例输入

1

3

3 5 8

3 2 2

17

样例输出
Yes*/

#include<stdio.h>

#include<string.h>

#define max(a,b) a>b?a:b

int dp[100010];

int main()

{
int t;
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
int ai[100010],mi[100010];
int n,k,i,j,l;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&ai[i]);
}
for(i=0;i<n;i++)
{
scanf("%d",&mi[i]);
}
scanf("%d",&k);
for(i=0;i<n;i++)
{
for(j=0;j<mi[i];j++)
{
for(l=k;l>=ai[j];l--)
{
dp[l]=max(dp[l],dp[l-ai[j]]+ai[j]);
}
}
if(dp[k]==k)
{
printf("Yes\n");
break;
}
}
if(dp[k]!=k)
printf("No\n");
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: