作为提高组d2t1d2t1d2t1,比去年难
所以这道题我打的特别的差
32pts
这道题我们很显然可以看到可以打一个暴力
复杂度o(n∗n!)o(n*n!)o(n∗n!)
我考场上就达到了这里——我太菜了
void dfs(int u,ll plus){
if(u==n+1){
if(!tot)return;
Rep(i,1,m)if(cnt[i]>tot/2)return;
ans=(ans+plus)%mod;
return;
}
dfs(u+1,plus);
Rep(i,1,m)
if(a[u][i]){
cnt[i]++;
tot++;
dfs(u+1,plus*a[u][i]%mod);
tot--;
cnt[i]--;
}
}
int main()
{
read(n),read(m);
Rep(i,1,n)Rep(j,1,m)read(a[i][j]);
dfs(1,1);
printf("%lld\n",ans);
return 0;
}
因为每一行只能选一个,所以我们可以每行爆搜找选哪个(或者不选),随后判断行不行
64 pts
这道题一拿到题就觉得是dpdpdp,但是没想出来转移方程,想要拿到64分,我们需要把mmm=2,3的情况拆成两种来讨论,当m=2m=2m=2时,用f[i][j][k]f[i][j][k]f[i][j][k]表示第iii行,第一种食材用了jjj次,第二种用了kkk次,可以显然得到一个转移方程f[i][j][k]=sum{
f[i−1][j][k],f[i−1][j−1][k]∗a[i][1],f[i−1][j][k−1]∗a[i][2]}f[i][j][k]=sum\{f[i-1][j][k],f[i-1][j-1][k]*a[i][1],f[i-1][j][k-1]*a[i][2]\}f[i][j][k]=sum{
f[i−1][j][k],f[i−1][j−1][k]∗a[i][1],f[i−1][j][k−1]∗a[i][2]}
当m=3m=3m=3时就是四位dpdpdp
if(m==2){
f[0][0][0</

最低0.47元/天 解锁文章
442





