一、题目
二、解法
n , k n,k n,k都很小,可以考虑状压,设 d p [ i ] [ s ] dp[i][s] dp[i][s]为完成目标数组的前 i i i个,需要用已有数组的状态为 s s s,状态数本来就不大,所以直接记忆化搜索即可。
复杂度我觉得应该是枚举子集的子集,所以是 O ( n 3 n ) O(n3^n) O(n3n),当然这只是上界,实际应该会快很多(搜索处剪枝)
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
const int M = 20;
string s[]={
" ","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si",