zoukankan      html  css  js  c++  java
  • 蓝桥 历届试题 分考场

    记录一下错误点:一开始用了贪心,其实在想贪心的时候就应该发现有些地方解释不了,如果用贪心的话,那肯定是逐个枚举点,分别在前num个房间去试,如果在某个房间没有认识的人,就把当前这个人放到那个房间里去,如果遍历所有已有的房间都存在认识的,那就新开一个房间。关键是这样想对吗?为什么某个房间里没有认识的人就一定要放到那个房间里?那尽管有某个房间不存在认识的人,那我新开一个房间放当前这个人答案会不会更优?我们不知道,那怎么办,暴力去试,记得剪枝

    附一个贪心不成立的情况 :1-3 2-4 3-4

    贪心:ans = 3 dfs :ans = 2

    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int n,m,num = 1,ans;
    bool edge[105][105];
    vector<int> room[101];
    void dfs(int id,int num)
    {
    	if(num >= ans) return; //剪枝
    	if(id == n+1){
    		ans = num;
    		return;
    	}
    	for(int fj = 1; fj <= num; fj++){
    		bool isfit = true;
    		for(int k = 0; k < room[fj].size(); k++){
    			int cnt = room[fj][k];
    			if(edge[cnt][id]){
    				isfit = false;
    				break;
    			}
    		}
    		if(isfit){
    			room[fj].push_back(id);
    			dfs(id+1,num);
    			room[fj].pop_back();
    		}
    	}
    	room[++num].push_back(id);
    	dfs(id+1,num);
    	room[num].pop_back();
    }
    int main()
    {
    	cin>>n>>m;
    	ans = n;
    	for(int i = 1; i <= m; i++){
    		int x,y;
    		cin>>x>>y;
    		edge[x][y] = edge[y][x] = true;
    	}
    	dfs(1,0);
    	cout<<ans;
    	return 0;
    }
    
    
    "没有天赋异禀,那就加倍努力"
  • 相关阅读:
    2016-09-13面试记录
    javascript中的深度拷贝的实现过程及深拷贝的几种方法。
    javascript中的for in循环
    常见的兼容问题及其解决方法。
    一次清空所有数据方法
    数组排序
    css对齐 挖坑~
    css reset样式重置
    CSS 表单
    CSS 表格
  • 原文地址:https://www.cnblogs.com/Beic233/p/13169003.html
Copyright © 2011-2022 走看看