Test 2022.09.20

2022年9月20日的测试(SCOI2005专场)

T1 扫雷

思考起来很简单,对于任意一个输入的a[i],它会约束的格子只有i1,i,i+1三个,也就是只要算出当前在i1,i位置摆放的情况,就能算出i位置的情况,显然place[1](place数组是摆放情况)是不确定的,所以我们需要计算它为1或0的两种可能性,递推式也不难想到:

place[i]=a[i1]place[i1]place[i2]

如果当前的place[i]算出来不等于0||1当前的情况就可以作废
最后如果place[n+1]==0(即不用在n+1摆放就可以满足),那么ans++

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int a[maxn];int pl[maxn];
bool valid(int x){return x==1||x==0;}
int ans=0;int n;
void calc(int f/*0,1*/)
{
memset(pl,0,sizeof pl);
pl[1]=f;int flag=0;
for(int i=2;i<=n+1;i++)
{
pl[i]=a[i-1]-pl[i-1]-pl[i-2];
if(!valid(pl[i]))
{
flag=1;
break;
}
}
if(pl[n+1]==0&&flag==0)ans++;
}
int main()
{
freopen("sweeper.in","r",stdin);
freopen("sweeper.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
calc(0),calc(1);
printf("%d",ans);
return 0;
}

T2 互不侵犯

义眼状压dp,定义dp[i][j][t]为前i行一共填了t个数,当前第i行填的是第j个合法数时的方案数

预处理

遍历 i=[1,1<<n1],如果i&(i<<1))||i&(i>>1)那么当前是不合法的,跳过
否则放入数组里并记录其二进制下1的个数bitcount(x)

状态转移

dp[i][j][t]+=dp[i1][las][tnum[j]],tnum[j]

其中:
i,j,t为定义所示,las枚举的是i1行填的数,num[j]是当前这个数的1的个数

答案

i=1cntdp[n][i][k](cnt是总共有效数字个数)

点击查看代码

T3 城市

义眼弱智最小生成树板子

点击查看代码

T4 最大子矩阵和(改了好久)

题目描述

这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。

输入格式

第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。

输出格式

只有一行为k个子矩阵分值之和最大为多少。

样例 #1

样例输入 #1

3 2 2
1 -3
2 3
-2 3

样例输出 #1

9

突破口m==1||m==2

首先定义dp[i][j][k]km不同的情况下表示不同的含义)

m==1

dp定义:第i个选了k段,第i个选/不选的最大值
转移

{dp[i][j][0]=max(dp[i1][j][1],dp[i1][j][0])dp[i][j][1]=max(dp[i1][j][1],dp[i1][j1][1],dp[i1][j1][0]),j1

m==2

思路:对于当前第i行,考虑合并第一列和第二列,那么一共就有5种如下情况

1,0分别表示当前列选与不选

{1:002:103:014:115:11

转移

{dp[i][j][1]=max(dp[i1][j][t],dp[i][j][1]),t[1,5]dp[i][j][2]=max(dp[i1][j][2],dp[i1][j][5],maxt=15dp[i1][j1][t])dp[i][j][3]=max(dp[i1][j][3],dp[i1][j][5],maxt=15dp[i1][j1][t])dp[i][j][4]=max(dp[i1][j][4],maxt=15dp[i1][j1][t])dp[i][j][5]=max(dp[i1][j1][2],dp[i1][j1][3],maxt=15dp[i1][j2][t])

(其中有关于t的都是枚举直接新建块,不做拼接操作)
那么代码就好写了,唯一的坑点是,枚举情况5的时候,默认j已经大于等于2了,所以要特判

Code
点击查看代码

最后要感谢机房不知名好兄弟的陪伴

image
image

posted @   Hanggoash  阅读(9)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
动态线条
动态线条end
点击右上角即可分享
微信分享提示