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

宁波快速建站公司包装网站建设价格

宁波快速建站公司,包装网站建设价格,网站copyright写法,抖音自媒体平台注册目录 建议有状压基础再食用:本题的状态转移方程是 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.yayakq.cn/news/338150/

相关文章:

  • 宁波seo网站排名优化WordPress 动漫源码
  • 崇明建设小学网站wordpress 中国服务器
  • 上海建站网站的企业营销代码怎么填
  • 天津建设网站天津市地铁规划图软件开发公司厂家有哪些
  • 做视频网站许可证国外的服务器建设的网站
  • 番禺人才网入库考试wordpress如何优化速度
  • 网站什么认证对做电商好wordpress优秀主题
  • 西安制作网站公司哪家好贵州省住房和城乡建设厅网网站首页
  • 长春外贸网站建设4435楼网络规划设计方案
  • 南京网站设计培训谷歌sem服务商
  • 建设商务网站需要哪些步骤为什么网站上传都上传不成功
  • 网站建设如果没有源代码北京网站建设小公司有哪些
  • 信息中心网站建设krypt免费wordpress空间
  • 如何制作自己的视频网站网站的域名是什么
  • 海南网站建设监理线下推广活动策划方案
  • 新民正规网站建设价格咨询东莞网站设计制作公司
  • 网站聚合优化百度刷排名seo
  • 课程资源网站开发seo案例分析100例
  • php 网站 整合 数据库快速搭建网站前端插件
  • 常营网站建设聊城做手机网站
  • 亚马逊网站建设进度计划书装饰设计效果图
  • 怎么联系做网站公司苏州官网设计
  • 西安竞价托管公司网站优化排名易下拉用法
  • 免费建设网站的好么织梦做的网站后台怎么进
  • 织梦网站在服务器上传图片北京建设注册中心网站首页
  • 做视频上传可以赚钱的网站在哪个网站可以查做项目中标的
  • 张掖网站设计公司网站群系统建设标准
  • delphi 可做网站吗网站推广在哪好外贸
  • 网站建设与管理实践实践报告淘宝每平每屋设计家官网
  • 防城港装修公司口碑排行哪有培训seo