博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【集训队作业2018】小Z的礼物
阅读量:6302 次
发布时间:2019-06-22

本文共 921 字,大约阅读时间需要 3 分钟。

题解

要求最大值,所以考虑\(min-max\)

\[ \max(S)=\sum_{T|S}\min(T)^{|T|+1} \]
那么一个集合的\(min\)如何求呢,我们一共有\(n*(m-1)+m*(n-1)\)个相邻的对,令该集合涉及到的相邻的对的个数为\(x\),那么期望的时间为\(\frac{n*(m-1)+m*(n-1)}{x}\)

所以我们可以在轮廓线上\(dp\),设\(dp[i][j][s][num]\)表示做到了\((i,j)\),当前状态为\(s\),有\(num\)个相邻对。

我们\(dp\)的内容是系数和,最后根据不同的\(num\)再乘上个系数就行了。

因为拐角的状态不用记,所以好写一些。

代码

#include
#define N 7#define M 103using namespace std;typedef long long ll;const int mod=998244353;int n,m;char a[N][M];ll dp[2][1<<6][N*M*2],ans;inline ll power(ll x,ll y){ ll ans=1; while(y){ if(y&1)ans=ans*x%mod; x=x*x%mod; y>>=1; } return ans;}inline void MOD(ll &x){x=x>=mod?x-mod:x;}inline ll ni(ll x){return power(x,mod-2);}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ scanf("%s",a[i]+1); } int sum=n*m*2-n-m; int now=1,pre=0; dp[now][0][0]=mod-1; int maxn=(1<

转载于:https://www.cnblogs.com/ZH-comld/p/11014880.html

你可能感兴趣的文章
记录自写AFNetWorking封装类
查看>>
没想到cnblog也有月经贴,其实C#值不值钱不重要。
查看>>
【转】LUA内存分析
查看>>
springboot使用schedule定时任务
查看>>
[转] Entity Framework Query Samples for PostgreSQL
查看>>
XDUOJ 1115
查看>>
PHP学习(四)---PHP与数据库MySql
查看>>
模版方法模式--实现的capp流程创建与管理
查看>>
软件需求分析的重要性
查看>>
eclipse的scala环境搭建
查看>>
UVA465:Overflow
查看>>
HTML5-placeholder属性
查看>>
Android选择本地图片过大程序停止的经历
查看>>
poj 2187:Beauty Contest(旋转卡壳)
查看>>
《Flask Web开发》里的坑
查看>>
Python-库安装
查看>>
Git笔记
查看>>
普通人如何从平庸到优秀,在到卓越
查看>>
SLAM数据集
查看>>
c#学习笔记05——数组&集合
查看>>