欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Bitmasking and Dynamic Programming 实例 :Count ways to assign unique cap to every person

程序员文章站 2024-03-11 20:00:37
...

Bitmasking and Dynamic Programming 实例 :Count ways to assign unique cap to every person
Bitmasking and Dynamic Programming 实例 :Count ways to assign unique cap to every person

#include<iostream>
#include<vector>
#include<sstream>  //stringstream
#include<string>
#include<bitset> 

using namespace std;

int main()
{
	//read
	int n;
	cin>>n;
	vector<vector<int>>capList(n);
	string temp, str; 
    int x; 
    getline(cin, str);  // to get rid of newline character 
    for (int i=0; i<n; i++) 
    { 
        getline(cin, str); 
        stringstream ss(str); 
  
        // while there are words in the streamobject ss 
        while (ss >> temp) 
        { 
            stringstream s; 
            s << temp; 
            s >> x; 
  
            // add the xth cap in the list of person if with id i 
            capList[i].push_back(x); 
        }
    }
    /// read end
	vector<bitset<100>>dp;
    dp.push_back(bitset<100>(0));
    for(int i = 1; i <= n; i++)
    {
    	vector<bitset<100>>cur;
    	for(int j = 0; j < capList[i-1].size(); j++)
    	{
    		for(int k = 0; k < dp.size(); k++)
    		{
    			bitset<100>preState = dp[k];
    			int cap = capList[i-1][j];
    			if(preState[cap]  == 0)
    			{
    				preState[cap] = 1;
    				cur.push_back(preState); 
    			}
    		} 
    	}
    	dp = cur;
    }
    cout<<dp.size();
    return 0;
}