BNU 沙漠之旅

来源:互联网 发布:开微店和淘宝店哪个好 编辑:程序博客网 时间:2024/03/29 08:03

http://www.bnuoj.com/bnuoj/problem_show.php?pid=29376

我直接暴力搜索的。
剪枝:
1、步骤最多只有4步,超过4步则退出
2、油的行程相加后的总和距离大于剩余距离时也退出

AC代码:
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int yn;int a[1010];bool cmp(int a, int b){    return a>b;}void Dfs(int sum, int now, int n,int nu,int i){ //   printf("%d %d %d %d %d\n",sum,now,n,nu,i);    int t,next;    if(yn == 1 || now > sum || nu > 4)    {        return ;    }    if(nu == 4 && now == sum)    {        yn = 1;        return ;    }    for(t = i; t < n; t++)    {        next = now+a[t];        Dfs(sum,next,n,nu+1,t);    }    return ;}int main(){    int t,i,l,x,n,sum;    scanf("%d",&t);    while(t--)    {        scanf("%d%d%d",&l,&x,&n);        for(i = 0; i < n; i++)        {            scanf("%d",&a[i]);        }        sum = l-x;        sort(a,a+n,cmp);        if(sum > a[0]*4)        {            printf("No\n");        }        else        {            yn = 0;            for(i = 0; i < n; i++)            {                if(yn == 1)                {                    break;                }                Dfs(sum,0,n,0,i);            }            if(yn)            {                printf("Yes\n");            }            else            {                printf("No\n");            }        }    }    return 0;}