ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1020 德玛西亚万岁 状压DP

2022-08-02 19:33:41  阅读:127  来源: 互联网

标签:1020 int ll 状压 吉沃特 num mp 德玛


 链接:https://ac.nowcoder.com/acm/contest/25022/1020
来源:牛客网

题目描述

德玛西亚是一个实力雄厚、奉公守法的国家,有着功勋卓著的光荣军史。 这里非常重视正义、荣耀、职责的意识形态,这里的人民为此感到强烈自豪。 有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优秀的战士。 结果比尔吉沃特领土太小,只有长为n宽为m共计n*m块土地,其中有些土 地标记为0表示为高山峻岭或者深海湖泊,英雄们无法在其中站立,只有标 记为1的土地才能容纳一个英雄。德玛西亚的英雄们战斗时有一个特点,他 们不希望队友站在自己旁边显得很暧昧。请问最多能有多少种安排德玛西 亚英雄的方法?

输入描述:

输入包含多组测试数据;
每组数据的第一行包含2个整数n和m (n <= 12, m <= 12 ),之间用空格隔开;
接下来的n行,每行m个数,表示n*m的比尔吉沃特领土。

输出描述:

输出一个整数n代表安排应用的方法。
(答案取膜100000000)
示例1

输入

复制
3 3
1 1 1
0 1 1
1 0 0

输出

复制
24

分析

同类型状压DP

ps:注意数据范围,防止段错误。地图可以只存障碍物。上一层要跟上一层比较。这题是方案个数,所以初始情况初始化成1.

//-------------------------代码----------------------------

//#define int ll
const int N = 2e6+10,mod = 1e8;
int n,m;

ll dp[15][1 << 13];
vector<int> s;
vector<int > num;
ll mp[15];
void solve()
{
    s.clear();num.clear();
    fo(i,0,(1<<m)-1) {
        if(i << 1 & i) continue;
        s.pb(i);
        bitset<64>bt(i);
        num.pb(bt.count());
    }
    fo(i,1,n) {
        mp[i] = 0;
        fo(j,1,m) {
            int x;cin>>x;
            if(!x)mp[i] |= 1 <<(m - j);
        }
    }
    ms(dp,0);
    dp[0][0] = 1;
    int cnt = s.size() - 1;
    fo(i,1,n+1) {
        fo(j,0,cnt) {
            if(mp[i] & s[j]) continue;
            fo(k,0,cnt) {
                if(mp[i-1] & s[k]) continue;
                if(s[k] & s[j]) continue;
                dp[i][j] =(dp[i][j] + dp[i-1][k] + mod) % mod;
            }
        }
    }
    cout<<dp[n+1][0]<<endl;
}

signed main(){
    clapping();TLE;

//    int t;cin>>t;while(t -- )
    while(cin>>n>>m) 
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

 

标签:1020,int,ll,状压,吉沃特,num,mp,德玛
来源: https://www.cnblogs.com/er007/p/16544918.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有