zoukankan      html  css  js  c++  java
  • leetcode691 Stickers to Spell Word

    思路:

    状压dp。
    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 class Solution 
     4 {
     5 public:
     6     int minStickers(vector<string>& stickers, string target) 
     7     {
     8         vector<vector<int>> v(stickers.size(), vector<int>(26, 0));
     9         for (int i = 0; i < stickers.size(); i++)
    10         {
    11             for (int j = 0; j < stickers[i].size(); j++)
    12             {
    13                 v[i][stickers[i][j] - 'a']++;
    14             }
    15         }
    16         vector<int> dp(1 << target.size(), -1);
    17         int ret = dfs(0, v, target, dp);
    18         if (ret < 0x3f3f3f3f) return ret;
    19         return -1;
    20     }
    21     int dfs(int now, vector<vector<int>>& v, string target, vector<int>& dp)
    22     {
    23         if (now == (1 << target.size()) - 1) return 0;
    24         if (dp[now] != -1) return dp[now];
    25         int minn = 0x3f3f3f3f;
    26         
    27         for (int i = 0; i < v.size(); i++)
    28         {
    29             vector<int> tmp = v[i];
    30             int s = now;
    31             for (int j = 0; j < target.size(); j++)
    32             {
    33                 if (!(s & (1 << j)) && tmp[target[j] - 'a'])
    34                 {
    35                     s |= (1 << j); tmp[target[j] - 'a']--;
    36                 }
    37             }
    38             if (s != now) { minn = min(minn, dfs(s, v, target, dp) + 1); }
    39         }
    40         return dp[now] = minn;
    41     }
    42 };
  • 相关阅读:
    笨蛋蛋都能学会的开机grub消除(双系统开机总是黑屏肿么办--多半是欠reset)
    Find a way HDU
    非常可乐 HDU
    Oil Deposits HDU
    迷宫问题 POJ
    Fire!
    Fire Game FZU
    Pots POJ
    Prime Path POJ
    Jquery鼠标悬停按钮图标动态变化效果
  • 原文地址:https://www.cnblogs.com/wangyiming/p/7651052.html
Copyright © 2011-2022 走看看