Bitmasking and Dynamic Programming 实例 :Count ways to assign unique cap to every person
程序员文章站
2024-03-11 20:00:37
...
#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;
}
上一篇: python练习题(三十一):用rectangle画方形
下一篇: 【C++】makefile