https://vjudge.net/problem/Aizu-ALDS1_5_A
蒟蒻开始接触dp了 第一道dp好像很简单
题意:给定一个数组 问选任意个元素是否能够凑出所给的数字 如果可以 输出yes 否则输出no
思路:就是对于每个元素 有选或者不选两种选择 直到选的个数超过了最大个数(失败)或者所选元素之和刚刚好就是所求的数字(成功)
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<set>
#include<cstring>
#include<sstream>
using namespace std;
typedef long long ll;
int n;
int arr[25];
int solve(int i, int m) {
if (m == 0) {//剩余量为0
return 1;//解决问题
}
else if (i >= n) {//用的元素个数超过了n
return 0;
}
return solve(i + 1, m) + solve(i + 1, m - arr[i]);//递归 选用当前元素或者不选用当前元素
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int m, t;
cin >> m;
for (int i = 0; i < m; i++) {
cin >> t;
if (solve(0, t)) {
cout << "yes" << endl;
}
else {
cout << "no" << endl;
}
}
return 0;
}







Comments | NOTHING