• 蓝桥杯历届试题 剪格子


    蓝桥杯历届试题 剪格子

    题目链接

    思路:dfs。

    吐槽一句蓝桥杯的测试用例真是水,还不如自己出的数据严。
    以下也不是完全正确的代码,只是能过蓝桥杯的样例。

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    const int INF = 0x3f3f3f3f;
    const int maxn = 15;
    int m,n;
    int mp[maxn][maxn],vis[maxn][maxn];
    int dx[4] = {-1,0,1,0};
    int dy[4] = {0,1,0,-1}; 
    int tmp,cnt,ans;
    bool flag;
    
    void dfs(int x, int y, int sum)
    {
    	if(x == 0 && y == 0)
    		flag = true;
    	if(sum == tmp && flag)
    	{
    		ans = min(cnt,ans);
    		return;
    	}
    	for(int i=0;i<4;i++)
    	{
    		int nx = x + dx[i];
    		int ny = y + dy[i];
    		if(nx >= 0 && nx < n && ny >= 0 && ny < m)
    		{
    			if(!vis[nx][ny] && mp[nx][ny] + sum <= tmp)
    			{
    				vis[nx][ny] = 1;
    				cnt++;
    				dfs(nx,ny,mp[nx][ny]+sum);
    				if(nx==0 && ny==0)
    					flag = false;
    				cnt--;
    				vis[nx][ny] = 0;
    			}
    		}
    	}
    }
    
    int main()
    {
    	while(~scanf("%d%d",&m,&n))
    	{
    		int sum = 0;
    		int max_num = 0; 
    		for(int i=0;i<n;i++)
    			for(int j=0;j<m;j++)
    			{
    				scanf("%d",&mp[i][j]);
    				max_num = max(max_num,mp[i][j]);
    				sum += mp[i][j];
    			}
    		if(sum & 1 && max_num > sum/2)
    			puts("0");
    		else
    		{
    			tmp = sum/2;
    			int ans_true = INF;
    			for(int i=0;i<n;i++)
    				for(int j=0;j<m;j++)
    				{
    					memset(vis,0,sizeof(vis));
    					flag = false;
    					vis[i][j] = 1;
    					ans = INF;
    					cnt = 1;
    					dfs(i,j,mp[i][j]);
    					ans_true = min(ans,ans_true);
    				}
    			
    			printf("%d
    ",ans_true);
    		}
    	}
    	return 0;
     } 
    
  • 相关阅读:
    ACCESS中不支持FULL JOIN的解决方案
    C#語法學習異常處理(Exception)
    C#語法學習(索引器[indexer])
    C#語法學習四(Char)
    人生的35个经典好习惯
    自学.NET之路属性,索引器
    Lucene.Net介紹
    Sql Server 日期格式转换
    MS SQL中的交叉数据报表
    C#語法學習一(Array,ArrayList)
  • 原文地址:https://www.cnblogs.com/syncCN/p/5250691.html
Copyright © 2020-2023  润新知