hdu 2616 Kill the monster(暴搜)

来源:互联网 发布:刘义军 知乎 编辑:程序博客网 时间:2024/05/01 07:53

想了许久的DP,结果直接上手暴搜就行了。。。

#include<stdio.h>#include<string.h>#define N 11int a[N],b[N],mark[N];int ans,cnt;int n,m;int Min(int x,int y){    if(x<y)        return x;    return y;}void fun(int m,int cnt){    int i;    for(i=1;i<=n;i++)    {        if(mark[i]==-1)            continue;        if(m>b[i])        {            mark[i]=-1;m-=a[i];cnt++;            if(m<=0)                ans=Min(ans,cnt);            fun(m,cnt);mark[i]=0;m+=a[i];cnt--;        }        else        {            mark[i]=-1;m-=2*a[i];cnt++;            if(m<=0)                ans=Min(ans,cnt);            fun(m,cnt);mark[i]=0;m+=2*a[i];cnt--;        }    }    return ;}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {        int i;        memset(mark,0,sizeof(mark));        for(i=1;i<=n;i++)            scanf("%d%d",&a[i],&b[i]);        ans=12;        cnt=0;        for(i=1;i<=n;i++)        {            if(m>b[i])            {                mark[i]=-1;  m-=a[i]; cnt++;                if(m<=0)                {                    ans=1;                    break;                }                fun(m,cnt); mark[i]=0; m+=a[i];cnt--;            }            else            {                mark[i]=-1;m-=2*a[i];cnt++;                if(m<=0)                {                    ans=1;                    break;                }                fun(m,cnt); mark[i]=0;m+=2*a[i];cnt--;            }        }        if(ans!=12)            printf("%d\n",ans);        else            printf("-1\n");    }    return 0;}


原创粉丝点击