NOIP2025模拟赛21

T1 T2 T3 T4
\({\color{#52C41A} 普及+/提高}\) \({\color{#3498DB} 提高+/省选− }\) \({\color{purple} 省选/NOI−}\) \({\color{black} NOI/NOI+/CTSC }\)

参赛网址:https://oj.33dai.cn/d/TYOI/contest/6899b750c5d9c2f14c1fd4cb

T2,T3,T4未完成搭建

T1 小明与魔法【NOIP2025模拟赛T1】

题目传送门

题目难度:\({\color{#52C41A} 普及+/提高}\)

算法标签:贪心

思路

特殊性质 \(A\):存在 \(1\le i\le n\),使得对任意 \(1\le j\le n\),均有 \(c_{i,j}=1\)

子问题 \(\alpha\):当 特殊性质 \(A\) 的约束下,即至少有 \(1\) 行全是 \(1\),所以可以直接用这一行去补全不是全 \(1\) 的列。

然后,在一般情况,我们考虑构造 全 \(1\) 行。

对于任意一行,每一个 \(0\) 都需要 \(1\) 次代价修改为 \(1\)

所以枚举每一行,然后判断每一行的 \(0\) 的个数,取最小值后转化成了 子问题 \(\alpha\)

\(\color{fb5555} Wrong\) \(\color{fb5555} Answer\) \(\color{fb5555} 95\)

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=3005;
const int inf=1e18+7;
int n;
int ans=inf;
int vis[maxn];
char a[maxn][maxn];

signed main(){
	freopen("magic.in","r",stdin);
	freopen("magic.out","w",stdout);
	cin>>n;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			cin>>a[i][j];
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			if (a[i][j]=='1')	vis[i]=1;
	for (int i=1;i<=n;i++){
		int f=0;
		for (int j=1;j<=n;j++){
			if (a[i][j]=='1')	continue;
			f++;
		}
		ans=min(ans,f);
	}
	for (int i=1;i<=n;i++){
		int f=0;
		for (int j=1;j<=n;j++){
			if (a[j][i]=='0')	f=1;
		}
		ans+=f;
	}
	cout<<ans;
	return 0;
}

了吗?

我们发现,当这一行全是 \(0\) 时,答案 \(++\)

AC Code

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=3005;
const int inf=1e18+7;
int n;
int ans=inf;
int vis[maxn];
char a[maxn][maxn];

signed main(){
	freopen("magic.in","r",stdin);
	freopen("magic.out","w",stdout);
	cin>>n;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			cin>>a[i][j];
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			if (a[i][j]=='1')	vis[j]=1;
	for (int i=1;i<=n;i++){
		int f=0;
		for (int j=1;j<=n;j++){
			if (a[i][j]=='1')	continue;
			f++;
		}
		if (vis[i]==0&&f!=0)	f++;
		ans=min(ans,f);
	}
	for (int i=1;i<=n;i++){
		int f=0;
		for (int j=1;j<=n;j++){
			if (a[j][i]=='0')	f=1;
		}
		ans+=f;
	}
	cout<<ans;
	return 0;
}

T2 小明去旅游 6【NOIP2025模拟赛T2】

题目传送门

题目难度:\({\color{#3498DB} 提高+/省选− }\)

算法标签:DP,树上DP

题意

翻译中...

思路

算法选择:贪心,DP

很明显,如果是贪心,正常的 出题人会使 \(1 \le k \le 10^5\)

所以开始 \(DP\)

考虑 \(dp_{i,j,0}\) 表示 \(i\) 的子树中选 \(j\) 个连通块并且 \(i\) 不在其子树的任意一个连通块里。

\(dp_{i,j,1}\) 表示 \(i\) 的子树中选 \(j\) 个连通块并且 \(i\) 其子树的一个连通块里。

然后考虑:

  • 开始状态:$\forall i \in [1,n] $ 满足 \(i\) 是叶节点的 $ dp_{i,0,1}=0$

  • 答案:\(\forall i \in [1,n]\) 满足 \(i\) 不是叶节点的都可以是根,在开始是给定 \(rt\) \(ans=\min(dp_{rt,k,0},dp_{rt,k-1,1})\)

最后是转移:

给定 $u \in [1,n],j \in [0,k] $

\(v\) 是 点 \(u\) 的儿子,点 \(u\) 已经选了 \(j\) 个 连通块,点 \(v\) 已经选了 \(t\) 个连通块。

转移中...

复杂度证明

严格证明:该算法 时间复杂度为 \(O(n\times k)\)

证明中...

AC Code

Waiting...

Judge...

WrongAnswering...

QAQ...

T3 字符串的小明【NOIP2025模拟赛T3】

题目传送门

题目难度:\({\color{purple} 省选/NOI−}\)

T4 进击的小明【NOIP2025模拟赛T4】

题目传送门

题目难度:\({\color{black} NOI/NOI+/CTSC }\)

posted @ 2025-09-27 21:38  Zzqyoung1121  阅读(10)  评论(0)    收藏  举报