UVA 12166 Equilibrium Mobile (天平性质 + DFS)
2017-02-12 15:29
316 查看
思路:题目要求是求改变的最小,那么就需要选定一个基准砝码,选择方式如下:对于任何一个结点砝码m来说,如果选定为基准,那么整棵树的总重量为m*2^deepth (m<<deepth),其中deepth为此砝码的深度,deeoth从0开始;用map<long long ,int>映射重量为(m<<deepth)的个数int,个数最多者选定为基准砝码。
DFS 递归思想:将表达式分成两份(通过,)然后分别DFS向下递归求解
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<long long ,int >map1;
int tatal;
string str;
void dfs(int cur,int len,int deepth){
if(str[cur]=='['){
int temp=0;
for(int i=cur+1;i<len;i++){
if(str[i]=='[')temp++;
else if(str[i]==']')temp--;
else if(str[i]==',' && temp==0){
dfs(cur+1,i-1,deepth+1);
dfs(i+1,len-1,deepth+1);
break; //找到中间点就退出了
}
}
}
else {
tatal++;
long long sum=0; //一定要定义为long long 型,sum<<deepth 可能大于int类型值
while(cur<=len){
sum=sum*10+str[cur]-'0';
cur++;
}
map1[sum<<deepth]++;
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
cin>>str;
tatal=0;
int len=str.length();
dfs(0,len-1,0);
int max1=0;
for(map<long long ,int>::iterator iter=map1.begin();iter!=map1.end();iter++){
max1=max(max1,iter->second);
}
printf("%d\n",tatal-max1);
map1.clear();
}
return 0;
}
DFS 递归思想:将表达式分成两份(通过,)然后分别DFS向下递归求解
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
map<long long ,int >map1;
int tatal;
string str;
void dfs(int cur,int len,int deepth){
if(str[cur]=='['){
int temp=0;
for(int i=cur+1;i<len;i++){
if(str[i]=='[')temp++;
else if(str[i]==']')temp--;
else if(str[i]==',' && temp==0){
dfs(cur+1,i-1,deepth+1);
dfs(i+1,len-1,deepth+1);
break; //找到中间点就退出了
}
}
}
else {
tatal++;
long long sum=0; //一定要定义为long long 型,sum<<deepth 可能大于int类型值
while(cur<=len){
sum=sum*10+str[cur]-'0';
cur++;
}
map1[sum<<deepth]++;
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
cin>>str;
tatal=0;
int len=str.length();
dfs(0,len-1,0);
int max1=0;
for(map<long long ,int>::iterator iter=map1.begin();iter!=map1.end();iter++){
max1=max(max1,iter->second);
}
printf("%d\n",tatal-max1);
map1.clear();
}
return 0;
}
相关文章推荐
- UVA-12166 天平性质+字符处理
- 习题6-6 修改天平(Equilibrium Mobile, NWERC 2008, UVa12166)
- [UVa 12166] 修改天平(Equilibrium Mobile)
- UVA 12166 Equilibrium Mobile 修改天平
- 6_9 天平(UVa839)<二叉树的DFS>
- uva12166 dfs+思维
- 习题6-6 修改天平 UVa 12166 二叉树 *
- uva12166 修改天平 元素的贡献值-最优解
- UVA12166 修改天平
- UVa 12166(字符型二叉树的dfs)
- UVa12166 Equilibrium Mobile(修改天平)
- UVa 12166 修改天平
- UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )
- UVa 225 – Golygons [DFS+剪枝]
- UVa 129 Krypton Factor困难的串 (dfs 递归搜索)
- UVA 291 The House Of Santa Claus(DFS算法)
- UVa 572 - Oil Deposits (简单dfs)
- uva 208 Firetruck (需要预先处理 再dfs,TLE是此题AC常规步骤……)
- UVA 331 Mapping the Swaps (回溯+dfs)
- uva 11045 - My T-shirt suits me(dfs)