20220920
t1 [SCOI2005]扫雷
最初思路
显然,对于数值为3或0的格子只有一种情况。考虑从已经确定的摆放情况向周围拓展,直至无法拓展。此时就将所有可以确定的摆放确定,最后只需处理不确定位置的方案数。一开始,我打算在不确定的位置进行dp,由上一个不确定的位置转移到下一个。最后思考无果,取得了蛙声一片的好成只因。虽然我个人觉得这个思路是可行的,但兴许只能以后实力有所长进了后才能来了结它了。。。
搜索
结果这题直接搜都能过(
枚举每个位置放或不放,再通过格子中的数值判断能否即可。
附上die码:
#include<iostream>
#define ll long long
#define fo(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
template<typename T>inline void in(T &x){
x=0;int f=0;char c=getchar();
for(;!isdigit(c);c=getchar())f|=(c=='-');
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
x=f?-x:x;
}
template<typename T>inline void out(T x){
if(x<0)x=~x+1,putchar('-');
if(x>9)out(x/10);
putchar(x%10^48);
}
const int N=100005;
int n;
int a[N],b[N];
int ans;
inline bool pd(int x){
if(b[x-1]+b[x]+b[x+1]==a[x])return 1;
return 0;
}
inline void dfs(int x){
if(x>n){
if(pd(n))
++ans;
return;
}
b[x]=1;
if(x==1||pd(x-1))dfs(x+1);
b[x]=0;
if(x==1||pd(x-1))dfs(x+1);
}
int main(){
in(n);
fo(i,1,n)in(a[i]);
dfs(1);
out(ans);
return 0;
}
t3 [SCOI2005]繁忙的都市
一眼顶针,鉴定为最小生成树
题目分析
-
改造的那些道路能够把所有的交叉路口直接或间接的连通起来。
-
在满足要求 1 的情况下,改造的道路尽量少。
-
在满足要求 1、2 的情况下,改造的那些道路中分值最大的道路分值尽量小。
由1可得需要得到一个连通图,由2可得需要得到一棵树,由3可得需要边权值尽可能小。
综上可得求最小生成树即可。
代码如下(kruskal):
#include<iostream>
#include<algorithm>
#define ll long long
#define fo(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
template<typename T>inline void in(T &x){
x=0;int f=0;char c=getchar();
for(;!isdigit(c);c=getchar())f|=(c=='-');
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
x=f?-x:x;
}
template<typename T>inline void out(T x){
if(x<0)x=~x+1,putchar('-');
if(x>9)out(x/10);
putchar(x%10^48);
}
const int N=305,M=1000005;
int n,m;
struct edge{
int w,v,u;
}e[M];
bool operator<(edge a,edge b){
return a.w<b.w;
}
int fa[N];
inline int get(int x){
return x==fa[x]?x:fa[x]=get(fa[x]);
}
int ans;
int main(){
in(n),in(m);
fo(i,1,m){
int u,v,c;
in(u),in(v),in(c);
e[i].u=u,e[i].v=v,e[i].w=c;
}
sort(e+1,e+m+1);
fo(i,1,n)fa[i]=i;
for(int i=1;i<=m;++i){
int u=get(e[i].u);
int v=get(e[i].v);
if(u==v)continue;
fa[u]=v;
ans=e[i].w;
}
out(n-1),putchar(' '),out(ans);
return 0;
}
还有两道,等把状压dp搞懂再说。。。
标签:20220920,return,int,void,dfs,getchar,out From: https://www.cnblogs.com/thanktothelights/p/16712242.html