分享下第三题思路,数据范围不大,可以三重循环dp,阴属性处理成负值,阳属性正值,然后用vector<unordered_map<int,int>> dp就可以表示负值,dp[i][j]表示总共用i个草药合成阴阳值为j的丹药的最小价值,dp[0][0]初始化0。三重循环,第一重用第i个草药更新dp,第二重取0到(K-1)的dp哈希表,第三重用迭代器遍历哈希表里的值,如果dp[j][k]存在那dp[j+1][k+yinyang[i]]=min(dp[j+1][k+yinyang[i]],dp[j][k]+val[i]),第二维从K-1反向遍历到0可以防止重复用同一个草药。最后看dp[1-K][Y]是否存在,从1-K里面选一个最小值