10317 - Equating Equations
来源:互联网 发布:sd卡删除数据怎么恢复 编辑:程序博客网 时间:2024/06/07 03:08
/*
一个搜索题 需要剪枝 把等式 a+b=c+d 转化为 a+b-c-d 这种形式 算出所有数值之和 如果不为偶数 则直接输出no
先计算出加号的数量 lp 也就是lp+1个数相加 进行搜索
dfs需要进行几层剪枝: 如果当前tsum《=sum/2 则进行下一层搜索
*/
#include<cstdio>
#include<cstring>#include<cstdlib>
char s[11000],oper[1100];
int num[1100],a[1100],b[1010],vis[1100];
int sum,lp,ln,po;
int change()
{
int l = strlen(s);
ln=0;
sscanf(s,"%d",&num[ln++]);
sum = num[0];
for(int i = 1; i < l; i++)
{
if(s[i]=='='||s[i]=='-'||s[i]=='+')
{
if(s[i]=='=') po = ln;
oper[ln] = s[i];
sscanf(s+i+1,"%d",&num[ln]);
sum += num[ln++];
}
}
lp=1;
for(int i = 1; i < ln; i++)
if(i<po&&oper[i]=='+')
lp++;
else if(i>po&&oper[i]=='-')
lp++;
}
int dfs(int cur,int pos,int tsum)
{
if(lp-cur>ln-pos)
return 0;
if(cur==lp)
{
if(tsum*2==sum)
return 1;
return 0;
}
if(pos<ln)
{
if((tsum+num[pos])*2<=sum)
{
vis[pos]=1;
b[cur] = num[pos];
if(dfs(cur+1,pos+1,tsum+num[pos]))
return 1;
}
}
vis[pos]=0;
if(pos<ln&&dfs(cur,pos+1,tsum))
return 1;
return 0;
}
int main()
{
while(gets(s))
{
memset(vis,0,sizeof(vis));
change();
if(sum%2==0&&dfs(0,0,0))
{
int la=1;
a[0] = b[0];
for(int i = 1; i < ln; i++)
{
if(i<po&&oper[i]=='+')
a[i] = b[la++];
else if(i>po&&oper[i]=='-')
a[i] = b[la++];
}
int k=1;
for(int i = 0; i < ln; i++)
if(!vis[i])
{
while(k<po && oper[k]=='+' && k<ln) ++k;
while(k>po && oper[k]=='-' && k<ln) ++k;
a[k++] = num[i];
}
printf("%d",a[0]);
for(int i = 1; i < ln; i++)
printf(" %c %d",oper[i],a[i]);
printf("\n");
}
else
puts("no solution");
}
return 0;
}
- uva 10317 - Equating Equations
- uva 10317 Equating Equations
- 10317 - Equating Equations
- 10317 - Equating Equations
- UVa:10317 Equating Equations
- uva 10317 - Equating Equations(dfs)
- UVA 10317 - Equating Equations (背包)
- UVA 10317 - Equating Equations 贪心 dfs
- 【UVA】10317 - Equating Equations(dfs + 剪枝)
- UVa 10317 - Equating Equations(DFS)
- UVA 10317 Equating Equations (状态压缩)
- UVa 10317 Equating Equations 解题报告(暴力)
- UVA10317- Equating Equations(回溯+剪枝)
- UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
- Equations
- Equations
- Equations
- HDOJ Equations
- codec engine代码阅读六---CE_DIR/examples/ti/sdo/ce/examles/apps/video_copy
- The content of the adapter has changed but ListView did not receive a notification 异常解析
- c语言中.c和.h文件的困惑
- MAT Memory Analyzer Tool 插件装配(图解)
- Microsoft.XMLHttp的用法
- 10317 - Equating Equations
- Codeforces 131D. Subway 寻找环-树的最短路径
- mCAS之VIP
- 一个CAsyncSocket例子
- ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
- Devexpress XtraReport 设置页面大小单位
- PHP 知识汇总
- AbandonedObjectPool 的相關屬性
- 计算机网络