hdu 4403 A very hard Aoshu problem
2017-11-11 21:13
357 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4403
想了一下发现是dfs暴力,题意是在一串数中放进去一个等于号,左右边放入若干加号,使得式子成立,事实上可以不用去管等号,把右边减到左边来,即在一串数的左侧加入若干加号,之后剩下的放入若干减号,使得最终结果为0即可,所以就可以dfs每二个数之间是放加号还是减号还是不放的情况,注意如果放下了减号,那么后面就都只能放减号了。
想了一下发现是dfs暴力,题意是在一串数中放进去一个等于号,左右边放入若干加号,使得式子成立,事实上可以不用去管等号,把右边减到左边来,即在一串数的左侧加入若干加号,之后剩下的放入若干减号,使得最终结果为0即可,所以就可以dfs每二个数之间是放加号还是减号还是不放的情况,注意如果放下了减号,那么后面就都只能放减号了。
#include<iostream> #include<cstring> #include<algorithm> using namespace std; long long int ans=0; char a[22]; void dfs(int wz,long long int dq,long long int sav,int op) { if(wz>=strlen(a)-1) { if(op==1)return ; if(dq-sav==0) ans++; return ; } if(op==1) { dfs(wz+1,dq+sav,a[wz+1]-'0',1); dfs(wz+1,dq,sav*10+a[wz+1]-'0',1); dfs(wz+1,dq+sav,a[wz+1]-'0',2); } if(op==2) { dfs(wz+1,dq-sav,a[wz+1]-'0',2); dfs(wz+1,dq,sav*10+a[wz+1]-'0',2); } } int main(){ while(cin>>a) { if(!strcmp(a,"END")) break; ans=0; dfs(0,0,a[0]-'0',1); cout<<ans<<endl; } return 0; }
相关文章推荐
- HDU 4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem (状态压缩+枚举)
- HDU 4403 A very hard Aoshu problem
- hdu 4403 A very hard Aoshu problem 状态压缩
- HDU 4403 A very hard Aoshu problem
- hdu 4403 A very hard Aoshu problem
- hdu 4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem
- HDU:4403 A very hard Aoshu problem
- A very hard Aoshu problem HDU-4403
- HDU 4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem (DFS)
- HDU 4403 A very hard Aoshu problem(DFS)
- 【HDOJ】4403 A very hard Aoshu problem
- HDU 4403 A very hard Aoshu problem【DFS】
- HDU - 4403 A very hard Aoshu problem ——dfs 数值符号插入
- Hdu 4403 A very hard Aoshu problem - 爆搜
- 杭电4403 A very hard Aoshu problem DFS