#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
/**
Problem : UVA11205 - The broken pedometer
Begin Time: 28th/Mar/2012 11:30 a.m.
Finish Time: 29th/Mar/2012 2:14 a.m.
Last Time : About 6 hours.
State:9924407 11205 The broken pedometer Accepted C++ 2.684 2012-03-28 18:11:32
Knowledge : BFS,剪枝都没有,还有子集生成,也算有个小小的状态压缩?
Exp.: WA * 4 :这四个Wrong Answer奉献给了误把BFS写成DFS,不应该
WA * 4 :我他妈对于后四个WA无力吐槽了啊我操。边界,边界!
tmp.depth + 1 <= col写成了 tmp.depth + 1 < col结果就少了一组组合啊!过脑子啊白痴!写程序时。
操操操操操。
Thought:
每行换成10110101这样的整数(因为最多才2^15,不用位运算了,否则怪麻烦的)
开一个数组isSel[],如果ith列被选了那么isSel[i] = true;
然后根据isSel判断目前选的列数,以及应该从那几列中抽取子集。
其实位运算能快一些。
Summerize:
发现搜索出错的时候
1.仔细想一下搜索的过程,状态转移的方式,是否有状态结点未展开
2.想一下边界,是否有问题
最重要的,写之前看清楚了,一般有最短,最少,最小字样的统统为BFS.
搜索的如果是个树,则不需要回溯,如果是个图,则需要回溯。
*/
const int MAXN = 200;
const int MAXP = 50;
int puzzle[MAXN][MAXP];
int subset[MAXN];
bool isSel[MAXN];
int minN;
bool isFound;
struct node
{
int depth;
bool isSel[MAXN];
};
node tmp;
queue<node> que;
int comp(const void *a, const void *b)
{
return (*(int*)a - *(int*)b);
}
bool check(int row,int col)
{
int cnt = 0;
memset(subset,0,sizeof(subset));
for(int i = 0 ; i < col ; i++)
{
if(isSel[i] == true)
cnt++;
}
for(int j = 0 ; j < row ; j++)
{
for(int i = 0 ; i < col ; i++)
{
if(isSel[i] == true )
{
subset[j] = subset[j] * 10 + puzzle[j][i];
}
}
}
qsort(subset,row,sizeof(int),comp);
int i = 0;
int j = i+1;
while( j < row )
{
if(subset[i] == subset[j])
{
return false;
}
i++,j++;
}
if( minN > cnt)
{
minN = cnt;
}
return true;
}
int Solve(int row,int col,int now)
{
node tmp,tmp1,k;
while(!que.empty())
{
tmp=que.front();
que.pop();
memcpy(isSel,tmp.isSel,sizeof(isSel));
tmp1 = tmp;
check(row,col);
if(tmp.depth + 1 <= col)
{
tmp1.depth = tmp.depth + 1;
tmp1.isSel[tmp1.depth - 1] = false;
que.push(tmp1);
tmp1.isSel[tmp1.depth - 1] = true;
que.push(tmp1);
}
}
return minN;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("b:\\acm\\UVA\\UVA11205\\input.txt","r",stdin);
freopen("b:\\acm\\uva\\uva11205\\output.txt","w",stdout);
#endif
int T,P,N,k;
// while( scanf("%d",&T) != EOF )
scanf("%d",&T);
{
for(int t = 1 ; t <= T ; t++)
{
scanf("%d%d",&P,&N);
memset(puzzle,0,sizeof(puzzle));
memset(subset,0,sizeof(subset));
memset(isSel,0,sizeof(isSel));
for(int i = 0 ; i < N ; i++)
{
for(int j = 0 ; j < P ; j++)
{
scanf("%d",&puzzle[i][j]);
}
}
minN = 200;
tmp.depth = 1;
tmp.isSel[0] = true;
que.push(tmp);
tmp.depth = 1;
tmp.isSel[0] = false;
que.push(tmp);
k = Solve(N,P,0);
printf("%d\n",k);
while(!que.empty())
{
que.pop();
}
}
}
return 0;
}
相关推荐
2026年最新开封市公交线路及站点矢量数据.zip
数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息
【POJ1077】Eight 八数码问题,解题报告+思路+代码
#include #include #include #define INPUT using namespace std; /** Problem : poj1077,hdu1043,经典的八数码问题。 知识点: BFS + HASH + 打表 + 父亲节点记录 境界:3 - BFS+HASH+打表 A了两天!!! 记得拿启发式,双向BFS重新写
CAD+ËÃÊÐֻɼ
CAD+ËÃÊÐֻɼ
【HDU2222】 0.6%达成 模板题 果然无聊的时候A题才是最正确的选择啊因为你就会更加无聊
#include #include #include #include #include using namespace std; /** Reference:http://www.cnblogs.com/procedure2012/archive/2012/01/29/2331460.html Thanks to: lpp学长给的模板和讲义 Pre-Knowle
【ZOJ3587】Marlon's String——白四爷×KMP 白濑肆の算法完全解读KMP篇 KMP来袭第二弹前缀什么的果然最讨厌了!【1.0%达成!】
#include #include #include #include /** Title: 【ZOJ3587】Marlon's String——白四爷×KMP 白濑肆の算法完全解读KMP篇 KMP来袭第二弹前缀什么的果然最讨厌了!【1.0%达成!】 Problem: ZOJ3587 Marlon's String Knowledge Point : KMP算法の深
【CodeForces 155C Hometask】白濑肆×字符串+DP——果然是字符串处理什么的好讨厌啊尤其是换行符的处理看来不用CIN不行了呢DP的转移真心不会啊水到家了怎么办!【1.1%达成】
#include #include #include #include using namespace std; const int MAX_SIZE = 1e5+10; char text[MAX_SIZE]; /** Title: 白濑肆×字符串+DP——果然是字符串处理什么的好讨厌啊尤其是换行符的处理看来不用CIN不行了呢虽然效率低人家好伤心的还有就是DP的转移真心不会啊水到
【HDU4313】Matrix 多校 解题报告+AC代码+思路+算法正确性证明,此为Kruskal贪心恶心版本,非自虐倾向慎入!建议想找解题报告的童鞋看简单版本的,这个我写给自己【目标达成 0.2%】
#include #include #include #include using namespace std; /** 【警告】这个恶心版本是我写给自己看的,关于解题报告,还是请移步简单版本吧,就在这篇文章的前一篇。 c0de4fun声明:本人未给出测试数据、未声明一次AC的题均为参考解题报告自己写的。 对那些无私贡献的大神真诚
【ACM模板】HASH表(无删除功能,添查)
#include #include #include #include #include #include using namespace std; const int HASH_SIZE = 1000000; const int HASH_KEY = 17; int next[HASH_KEY][HASH_SIZE]; int hash[HASH_SIZE]; int origin_
【0.9%】SPOJ7758 Grwoing Strings 解题报告 + AC代码 + 思路 + AC自动机简短总结
#include #include #include #include #include using namespace std; const int MAX_SIZE = 1000100; /** 【0.9%】SPOJ7758 Grwoing Strings 解题报告 + AC代码 + 思路 + AC自动机简短总结 ——果然智商捉急的话就要WA到死才能AC啊人生来不是给
【HDU3415】Max Sum of Max-K-sub-sequence,思路+解题报告+AC代码+自虐般疯狂吐槽【0.3%达成!】
#include #include #include #include using namespace std; const int MAX_SIZE = 100010 * 2; const int INFINITE = 99999999; int num[MAX_SIZE]; int sum[MAX_SIZE]; int q[MAX_SIZE]; int ind[MAX_SIZE]; i
【ZOJ3228】白濑肆の完美算法教室补番作,0.7%达成 白濑肆×AC自动机
#include #include #include #include #include using namespace std; /** 就是一个AC自动机 但是每个单词有两个状态,[0]是可以overlap,[1]是不能overlap时候的次数 我们用last数组记录下每个不能overlap的单词出现的位置,如果 当前位置 - last[word]
【UVa10167】 Birthday Cake,思路+代码+解题报告
#include #include #include #include // #define INPUT /** Problem: UVA10167 - Birthday Cake Begin Time:22nd/Mar/2012 5:00 p.m. End Time: 22nd/Mar/2012 7:35 p.m. Last Time: 2H 35M
【HDU4313】Matrix 多校 解题报告+AC代码+思路+算法正确性证明,此为Kruskal贪心简单版本,恶心版本稍后放出【目标达成 0.2%】
#include #include #include #include using namespace std; /** c0de4fun声明:本人未给出测试数据、未声明一次AC的题均为参考解题报告自己写的。 对那些无私贡献的大神真诚的致敬!本题的测试数据可以看最后面 Problem: HDU4313 - Matrix Refe
【HDU4313】 - Matrix - 树状DP Version 思路+解题报告+AC代码【0.4%达成】
#include #include #include #include #include using namespace std; /** Problem: HDU4313 - Matrix - DP Version【0.4%达成】 Copyright : 归我们学校集训队和本人所有,未经同意可以转载。 【但是胆敢用于培训的话,贵学校服务
【HDU2571】命运
#include #include #include #include using namespace std; const int MAXN = 100; const int MAXM = 1100; int maze[MAXN][MAXM]; int dp[MAXN][MAXM]; int solve(int n,int m,int N,int M) { //向下一次只能走一格。但是
【ZOJ3471】Most Powerful, 思路+源代码+解题报告(好久没写解题报告了……)【目标达成:0.1%】
/** Problem:ZOJ3471-Most Powerful. Reference:http://blog.csdn.net/magicnumber/article/details/6182891 Knowledge point:状态压缩DP Thought: 根据炮兵阵地(那是别的题)和这道题,还有一次多校的经验(就是那个类似拼图的那个题,给你
需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)
内容概要:本文围绕需求响应动态冰蓄冷系统及其需求响应策略的优化展开研究,利用Matlab进行代码实现与仿真分析。研究聚焦于冰蓄冷系统在电力负荷削峰填谷中的关键作用,通过构建系统的能耗模型与需求响应机制,优化冷负荷调度策略,旨在降低用电成本、提升能源利用效率,并增强电网运行的稳定性与灵活性。文中系统阐述了系统建模方法、多目标优化问题的构建(涵盖经济性与舒适性)、约束条件的设定以及智能优化算法(如遗传算法、粒子群优化等)的应用过程,最终求解出在分时电价等激励政策下的系统最优运行方案,为实际工程应用提供理论支持与技术路径。; 适合人群:具备一定电力系统、暖通空调(HVAC)、能源管理或自动化控制背景,熟悉Matlab编程语言与基本优化算法,从事相关领域科研或工程应用的研究生、工程师及技术人员。; 使用场景及目标:①应用于工业园区、大型商业综合体、公共建筑等配备冰蓄冷系统的场所,进行节能优化设计与运行策略制定;②支撑电力系统需求侧管理、虚拟电厂构建及智能调度的研究与实践;③为实现“双碳”战略目标下的低碳、高效、灵活的综合能源系统提供关键技术参考与仿真验证工具。; 阅读建议:读者应结合提供的Matlab代码与理论模型进行同步学习,重点关注系统建模的物理逻辑、目标函数的设计思路与优化算法的具体实现细节,建议动手调试不同参数(如电价信号、负荷水平)以深入理解需求响应机制对系统调度效果的影响。
5773




被折叠的 条评论
为什么被折叠?



