zoukankan      html  css  js  c++  java
  • HDU 2616 Kill the monster (暴力搜索 || 终极全阵列暴力)

    主题链接:HDU 2616 Kill the monster

    意甲冠军:有N技能比赛HP有M怪物,技能(A,M),能伤害为A。当怪兽HP<=M时伤害为2*A。

    求打死怪兽(HP<=0)用的最少技能

    方法一:将技能全排列。计算伤害。得到答案。

    方法二:搜索,详细看代码。



    全排列AC代码:


    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct node
    {
        int p,v;
    };
    struct node st[30];
    
    int main()
    {
        int n,d,i;
        int t[30];
        int ans;
        while(scanf("%d %d",&n,&d)!=EOF)
        {
            for(i=0;i<n;i++)
            {
                scanf("%d %d",&st[i].p,&st[i].v);//p掉血,V double
                t[i]=i;
            }
            int sum;
            ans=100;
            do
            {
                sum=d;
                int count=0;
                for(i=0;i<n;i++)
                {
                    if(sum<=st[t[i]].v)
                        sum-=st[t[i]].p*2;
                    else
                        sum-=st[t[i]].p;
                    count++;
                    if(sum<=0)
                        break;
                }
                if(sum<=0)
                    ans=min(ans,count);
            }while(next_permutation(t,t+n));
            if(ans==100)
                printf("-1
    ");
            else
                printf("%d
    ",ans);
        }
        return 0;
    }



    搜索AC代码:


    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct spell
    {
    	int a,m;
    };
    struct spell sp[20];
    int n,ans,flag;
    bool vis[30];
    void dfs(int p,int sum)
    {
    	int i;
    	if(sum<=0)
    	{
    		flag=1;
    		ans=min(ans,p);
    		return ;
    	}
    	for(i=0;i<n;i++)
    	{
    		if(!vis[i])
    		{
    			vis[i]=true;
    			if(sum<=sp[i].m)
    				dfs(p+1,sum-sp[i].a*2);
    			else
    				dfs(p+1,sum-sp[i].a);
    			vis[i]=false;
    		}
    	}
    }
    int main()
    {
    	int i;
    	int m;
    	while(scanf("%d %d",&n,&m)!=EOF)
    	{
    		flag=0;
    		memset(vis,false,sizeof vis);
    		for(i=0;i<n;i++)
    			scanf("%d %d",&sp[i].a,&sp[i].m);
    		ans=n;
    		dfs(0,m);
    		if(flag)
    			printf("%d
    ",ans);
    		else
    			printf("-1
    ");
    	}
    	return 0;
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    vsftp配置文件
    oracle 7.4安装nvidia驱动
    python3.5-tensorflow-keras 安装
    linux 下u盘只读
    ubuntu1604-Python35-cuda9-cudnn7-gpu-dockerfile
    prometheus及gpu,k8s
    简单配置prometheus
    镜像源操作-ananconda-docker
    源码编译git-go
    ubuntu 微信安装-废弃
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4739101.html
Copyright © 2011-2022 走看看