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

mvc做网站用的多不多湖南建设监理官方网站

mvc做网站用的多不多,湖南建设监理官方网站,大网站前端怎么做的,学做网站要什么基础目录 建议有状压基础再食用:本题的状态转移方程是 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/42242/

相关文章:

  • 低价网站建设教程义乌高端网站建设
  • 长春网站制作wang北京企业官网网站建设报价
  • 网站建设淮南企业网站怎么建站
  • 网站如何做微信推广数商云网络科技有限公司
  • 建设工程自学网站产品线上推广方式有哪些
  • 建筑毕业设计代做网站企业现在有必要做网站吗
  • 新手学做百度联盟网站提高网站排名的方法
  • 自己如何建设微信网站电商网站业务流程图
  • 网站ui界面设计山西省确诊病例最新情况
  • 建设旅游网站数据库设计网站开发赚钱的方法
  • 互联在线app开发网站wordpress+调用多媒体
  • 北京网站建设 降龙网网站开发是做什么的
  • 哪里可以做网站开发新建站点的步骤
  • 北京市住房和城乡建设网站wordpress 开源模板
  • 宝塔可以做二级域名网站么wordpress 首页登录注册
  • 公司网站用模板做交流平台网站怎么做不了
  • 梅州免费建站公司抖音代运营mcn
  • 网页美工设计教案网页元素设计苏州seo按天扣费
  • wordpress门户网站国家重大建设项目网站地址
  • 网站建设会议纪要定制网站制作公司
  • 如何优化啊里网站排名开发个app需要多少钱?
  • 怎么把自己的网站做自适应网站汽车网站建设网
  • 自己制作一个网站的软件网站建设深圳哪家好
  • 网站开发量北京网站搭建设计
  • 什么是网站维护怎么增加网站反链
  • 制作钓鱼网站教程推广方法策略与经验总结
  • 中国做类似 esty的网站那有名网站是php做的
  • 学校网站建设必要性企业管理软件排行榜前十
  • 那个网站做的调查准确怎么让网站页面自适应
  • 网站的程序怎么做的广州市建设和水务局网站