当前位置: 首页 > news >正文

用flash做网站教程今日网站收录查询

用flash做网站教程,今日网站收录查询,找个人给我做电影网站好,wordpress 分类目录 404目录 建议有状压基础再食用:本题的状态转移方程是 dp代码片:参考代码 建议有状压基础再食用: n行m列 等价 n列m行 ,因为n比较小,int是32位足够了,我们用比特位统计每一行的状态。 本题的状态转移方程是 dp[h][i][j]…

目录

  • 建议有状压基础再食用:
    • 本题的状态转移方程是
  • dp代码片:
  • 参考代码

建议有状压基础再食用:

n行m列 等价 n列m行 ,因为n比较小,int是32位足够了,我们用比特位统计每一行的状态。

本题的状态转移方程是

dp[h][i][j][num] = (dp[h][i][j][num] + dp[h - 1][j][ii][num - nums[i]])%mod;
h是行数,i和j表示本行状态和上一行状态,num表示个数。
nums[i]是情况为 i 时的bit位为1的数目,提前可以统计一下。
dp的值就是求的情况数。

很难理解,其实我们先不看i 和 j,只看行数和num,这才是dp的样子。
然后加上i和j状态压缩,就是状压dp了。

(动态规划是有条理的遍历,是全面覆盖的,num所有可以的情况都会遍历。本行i是0也会,所以只有前几行放棋子的,后面全是0也会遍历到的。)

dp代码片:

前一行和本行情况的比特位存在隔2的

前两行和本行情况的比特位存在隔1的情况直接略去,也就是马会互吃的情况。

//初始化
dp[0][0][0][0] = 1;//0行什么也不放。第一行肯定会摸一下,方案数是1
//for (int h = 1; h <= m; h++)
{for (int i = 0; i < (1ll << n); i++)//本行{for (int j = 0; j < (1ll << n); j++)//前一行{for (int ii = 0; ii < (1ll << n); ii++)//前两行{for (int num = nums[i]; num <= k; num++){if ((i << 2 & j) || (i >> 2 & j))continue;if ((i << 1 & ii) || (i >> 1 & ii))continue;dp[h][i][j][num] = (dp[h][i][j][num] + dp[h - 1][j][ii][num - nums[i]])%mod;}}}}
}

参考代码

int n,m,k;int countb(int aim)
{int ret = 0;for (int i = 0; i < n; i++){if (aim & (1ll << i)){ret++;}}return ret;
}void solve()
{cin >> n >> m >> k;//n行m列  等价  n列m行//n列可统计状压vector<int>nums(1 << n);for (int i = 0; i < (1ll << n); i++){nums[i] = countb(i);}vector<vector<vector<vector<int>>>>dp(m+1, vector<vector<vector<int>>>(		1ll<<n, vector<vector<int>>(1ll << n,vector<int>(k+1)	)  )	 );//第几行 本行状态 前一行状态 个数 == 方案数//dp[0][0][0][0] = 1;//0行什么也不放。第一行肯定会摸一下,方案数是1//for (int h = 1; h <= m; h++){for (int i = 0; i < (1ll << n); i++)//本行{for (int j = 0; j < (1ll << n); j++)//前一行{for (int ii = 0; ii < (1ll << n); ii++)//前两行{for (int num = nums[i]; num <= k; num++){if ((i << 2 & j) || (i >> 2 & j))continue;if ((i << 1 & ii) || (i >> 1 & ii))continue;dp[h][i][j][num] = (dp[h][i][j][num] + dp[h - 1][j][ii][num - nums[i]])%mod;}}}}}//后面都是0也包括了只在前几行放的。。//动归int ans = 0;for (int i = 0; i < (1ll << n); i++)//本行{for (int j = 0; j < (1ll << n); j++)//前一行{ans = (ans + dp[m][i][j][k]) % mod;}}cout << ans;return;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;for (int i = 1; i <= t; i++){solve();}return 0;
}
http://www.shuangfujiaoyu.com/news/7762.html

相关文章:

  • 无锡市建设培训中心网站制造企业网站建设
  • 新疆生产建设兵团十二师网站使用软件提高百度推广排名
  • 莱芜聊城网站建设百度下载免费
  • 做网站维护合同爱站seo
  • 政府网站建设方案范文 工作方案百度指数排行榜
  • 忻州企业网站建设交换链接营销案例
  • 猪八戒做网站排名如何制作百度网页
  • 国防教育网站建设说明书怎样在百度上做免费推广
  • 网站 默认首页不限制内容的搜索引擎
  • 织梦网站排版能调整吗广告软文范例200字
  • 做分享网站台州网站建设方案推广
  • 做彩票的网站吗成都互联网公司排名
  • 网站如何做seo推广网站建设报价
  • 公司网页网站建设ppt模板sem是什么意思啊
  • 做网站主机要选好建立个人网站
  • 站长联盟网站cms
  • 一个真正的网站需要怎么做58百度搜索引擎
  • 定制棺材网站今天北京发生大事了
  • 成都旅游的网站建设营销型网站建设怎么做
  • 建设五证在那个网站可以查怎么在百度上发帖推广
  • 263企业邮箱入口登录找回密码搜索引擎seo优化平台
  • 基于php网站建设论文网站推广优化外包便宜
  • 重庆网站优化排名推广推广普通话的宣传语
  • 个人网站建立教程网站推广的基本方法
  • 厦门学网站建设网络营销策划方案案例
  • dnf做任务解制裁的网站河南新闻头条最新消息
  • 做app推广上哪些网站吗海外短视频跨境电商平台是真的吗
  • 游戏网页制作模板知乎关键词优化软件
  • 如何给网站做证书公司网站免费建站
  • dedecms 建两个网站的问题怎么创造自己的网站