【HHHOJ】ZJOI2019模拟赛(十五)03.17 解题报告

点此进入比赛

得分: \(42+10+14=66\)

排名: \(Rank\ 3\)

\(Rating\)\(+53\)

\(T1\):【HHHOJ200】稗田的梦中之梦(点此看题面

暴力\(DFS\)+上界限制,水到\(42\)\(23333\)

只需在暴力\(DFS\)的过程中,加上一个限制每个点的经过次数不能超过\(k\)这样显然会错,但至少不会\(TLE\)

没什么细节,直接上骗分代码吧:

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 15
#define K 7
#define V 25000
#define INF 1e9
#define add(x) (!cnt[x]++&&++tot)
#define del(x) (!--cnt[x]&&--tot)
#define DFS(x,y,s,t) (a[x][y]&&add(a[x][y]),vis[x][y]=1,dfs(x,y,s,t),vis[x][y]=0,a[x][y]&&del(a[x][y]))
using namespace std;
const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
int n,m,k,tot,ans=INF,a[N+5][N+5],v[N+5][N+5],vis[N+5][N+5],cnt[V+5];
I void dfs(CI x,CI y,CI s,CI t)//DFS
{
    if(s>k||t>=ans) return;if(!(tot^k)) return (void)(ans=t);//经过次数大于k就退出
    for(RI i=0,nx,ny;i^4;++i)//枚举走的方向
    {
        if((nx=x+dx[i])<1||nx>n||(ny=y+dy[i])<1||ny>m||!~a[nx][ny]) continue;//如果超出边界或到达-1,跳过
        vis[nx][ny]?(dfs(nx,ny,s+1,t),0):DFS(nx,ny,s+1,t+v[nx][ny]);//搜索
    }
}
int main()
{
    RI i,j;for(scanf("%d%d%d",&n,&m,&k),i=1;i<=n;++i) for(j=1;j<=m;++j) scanf("%d",&a[i][j]);//读入数据
    for(i=1;i<=n;++i) for(j=1;j<=m;++j) scanf("%d",&v[i][j]);//读入数据
    for(i=1;i<=n;++i) for(j=1;j<=m;++j) ~a[i][j]&&DFS(i,j,0,v[i][j]);//搜索
    return ans==INF?puts("-1"):printf("%d",ans),0;//输出答案
}

\(T2\):【HHHOJ201】阿求的Q(点此看题面

完全不会。。。

就水了\(a_i=0\)\(10\)分最小费用最大流。

代码略。

\(T3\):【HHHOJ202】狂言【不凋的竹之花】(点此看题面

神仙题,但\(k\le2\)\(14\)分还是很好骗的。

考虑\(k=1\),删除环上的任意一条边或者不删边即可。

考虑\(k=2\),略有些复杂,难以说清楚,但还是比较简单的。

这好像又类似于一道著名的神仙\(DZY\)题。

反正不会做。

转载于:https://www.cnblogs.com/chenxiaoran666/p/HHHOJ_ZJOI2019_15.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值