程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H題

hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H題

編輯:C++入門知識

hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H題


題目鏈接:點擊打開鏈接

題意:就是一個按位運算的一個函數,問最少經過多少步運算可以得到給定數;

思路:不是我投機取巧想打表,是特麼這題只能打表。。。打表思想用可以得到的數的集合表示狀態bfs;最後有一個需要11步的需要打將近1h,除去這一個十分鐘就夠了。

cpp:

#include 
#include 
#include 
#include 
#include 
using namespace std;
int mark[300];
struct node{
	int deep;
	vector  us;
	void init(){
		deep=0;
		us.push_back(15);
		us.push_back(51);
		us.push_back(85);
		us.push_back(0);
		us.push_back(255);
	}
	bool find(int n){
		for(int i=0;i Q;
map,bool> Map;
//打出全部表版本的check
bool check(){
	int bj=1;
	for(int i=0;i<256;i++){
		if(mark[i]<0) {
			bj=0;
		}
	}
	if(bj)
	for(int i=0;i<256;i++){
		printf("%d , ",mark[i]);
	}
	return bj;
}
//留下最後一個數不打的check版本
bool check(){
	int cnt=0;
	for(int i=0;i<256;i++){
		if(mark[i]<0) {
			cnt++;
		}
	}
	if(cnt<2)
	for(int i=0;i<256;i++){
		printf("%d , ",mark[i]);
	}
	return (cnt<2);
}
void  bfs(){
	node tpe;
	tpe.init();
	Q.push(tpe);
	for(int i=0;i<5;i++)
	{
		mark[tpe.us[i]]=0;
	}
	while (!check()){
		node tp=Q.front();
		Q.pop();
		for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved