您的位置:首页 > 其它

九度 1358 陈博的平均主义

2011-12-22 09:53 211 查看
http://ac.jobdu.com/problem.php?id=1358

好久没做题了,真希望没有任何考试,大家学自己喜欢学的,太多的规则束缚。。

DFS,暂时还没想到别的好办法 下面是几个剪枝

1)所有数字总合为奇数

2)当前总合已大于所有总合一半

一次AC,没排序,不知道排序后能不能有更好的剪枝,不过看了下榜,第一名了已经,应该没有太好的办法了

  

#include <stdio.h>
int N,num[10];
int A,B;
int res=0;
bool flag=false;
void dfs(int cur_num,int cur_pos)
{
if(flag)
return;
if(cur_num*2>res)
return;
if(cur_num*2==res){
flag=1;
return;
}
if(cur_pos>=N)
return;
dfs(cur_num+num[cur_pos],cur_pos+1);
dfs(cur_num,cur_pos+1);
}
int tran(int n)
{
res=0;
int i=0;
while(n){
num[i++]=n%10;
res+=n%10;
n/=10;
}
return i-1;
}
bool check(int n)
{
N=tran(n);
flag=false;
if(res%2!=0)
return false;
dfs(0,0);
if(flag)
return true;
return false;
}
int main()
{
while(scanf("%d%d",&A,&B)!=EOF){
int i,num=0;;
for(i=A;i<=B;i++){
if(check(i))
num++;
}
printf("%d\n",num);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: