PING_PONG
题意:现在给定有n张钞票,每张钞票对应一个面值,为了不让商店老板找零钱,需要让这n张钞票能够凑出1-n之间的所有数字,请问这个x的最大值是多少,如果1都凑不出,请输出0;
输入描述:
首先输出一个数字n(1<=n<=15),表示他们俩一共有的钞票数量,接下来n个整数,表示没张钞票的面值x(1<=x<=100)
输出描述:
最大化x,使得用这n张钞票能够拼凑出1-x之间所有数字,如果不存在,输出0
题解:dfs深搜,每张钞票只有选和不选两种情况;
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
const int maxn=20;
int a[maxn],n;
map<int,int> mp;
void dfs(int sum,int cnt){
mp[sum]=1;
if(cnt==n+1) return;
dfs(sum+a[cnt],cnt+1);
dfs(sum,cnt+1);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
dfs(0,1);
for(int i=1;i<=2000;i++){
if(mp[i]==1) continue;
else {
printf("%d",i-1);
return 0;
}
}
}