https://www.nowcoder.com/question/next?pid=15241711&qid=325938&tid=43453049
小米2019秋招算法笔试题(A)
[编程题]小米大礼包
小米之家是成人糖果店。里面有很多便宜,好用,好玩的产品。中秋节快到了,小米之家想给米粉们准备一些固定金额大礼包。对于给定的一个金额,需要判断能不能用不同种产品(一种产品在礼包最多出现一次)组合出来这个金额。聪明的你来帮帮米家的小伙伴吧。
输入描述:
输入 N (N 是正整数, N <= 200) 输入 N 个价格p(正整数, p <= 10000)用单空格分割 输入金额 M(M是正整数,M <= 100000 )
输出描述:
能组合出来输出 1 否则输出 0
输入例子1:
6 99 199 1999 10000 39 1499 10238
输出例子1:
1
#include<iostream>
using namespace std;
#define N 2000
#define M 100010
int mian()
{
int n;
int price;
cin>>n;
cin>>price;
vector<int> num(n,0);
bool dp[N][M] ;//前i个商品能否组成价格j
for(int 1=0;i<n;i++)
{
cin>>num[i];
dp[i][0]=true;//可以组成价格零的礼包是肯定的。
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=price;j++)
{
dp[i][j]=dp[i-1][j]||(j>=num[i]&&dp[i-1][j-num[i]]);
}
}
cout<<dp[n][price]<<endl;
return 0;
}