(位运算) Krolia的礼包难题(CD1783)

来源:互联网 发布:linux默认path 编辑:程序博客网 时间:2024/06/11 23:09


题意:给出有N种礼物,现在有M个客人要求礼品包装后送出。

         如果有几种物品种是在一起,则可以用同一种包装纸进行包装。

         不同的包装会用不同的包装纸。求最少用的包装纸数。

 

 

思路:一开始做时候是比赛,当时的状态很不好,一开始还以为是

       以前做过的四色问题,就是最多可能有四种包装纸。后来才知道具体的题意,

      是因为没有读懂题真正的意思。今天看了一点电影,激情大开,然后就做这个题,

      看着只有50左右的礼物,直接可以用long long 型的位运算对其进行纪录并保存,

     而且这样还会有操作方便的好处,所以就这样了。

 

 

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int li[55][55];long long  b[55];int main(){freopen("in.txt","r",stdin);int i,j,k;int n,m;int t;cin>>t; while (t--){cin>>n>>m;for (i=1;i<=m;i++){b[i]=0;for (j=1;j<=n;j++){cin>>li[i][j];b[i]=(b[i]<<1)+li[i][j];//cout<<li[i][j]<<' ';}//cout<<endl;//cout<<b[i]<<endl;}int ans=0;long long cur=0;for (i=1;i<=m;i++)cur=cur|b[i];long long temp=1;//cout<<cur<<endl;while (cur){temp=1;k=56;while (k--){if (temp&cur)break;temp=temp<<1;}long long mm=(1<<55)-1;for (i=1;i<=m;i++){if (temp&b[i])mm=mm&b[i];elsemm=mm&(~b[i]);}cur=cur&(~mm);ans++;//cout<<temp<<' '<<cur<<' '<<mm<<endl;}cout<<ans<<endl;}return 0;}


 

 

 

Krolia的礼包难题

Time Limit: 1000 ms Memory Limit: 65535 kB Solved:74 Tried: 323

原创粉丝点击