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\n");
        else
            printf("%d\n",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\n",ans);
		else
			printf("-1\n");
	}
	return 0;
}
时间: 2024-10-14 23:39:33

HDU 2616 Kill the monster (暴力搜索 || 终极暴力全排列)的相关文章

HDU 3699 A hard Aoshu Problem (暴力搜索)

题意:题意:给你3个字符串s1,s2,s3;要求对三个字符串中的字符赋值(相同的字符串进行相同的数字替换), 替换后的三个数进行四则运算要满足左边等于右边,求有几种解法. Sample Input 2 A A A BCD BCD B Sample Output 5 72 eg:ABBDE   ABCCC   BDBDE :令 A = 1, B = 2, C = 0, D = 4, E = 5 12245 + 12000 = 24245: 注意没有前导零!! #include<stdio.h>

HDU 4499 Cannon (暴力搜索)

题意:在n*m的方格里有t个棋子,问最多能放多少个炮且每个炮不能互相攻击(炮吃炮) 炮吃炮:在同一行或同一列且中间有一颗棋子. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <queue> #include <math.h> #define M 50 #define LL long long using

hdu 1399 Starship Hakodate-maru (暴力搜索)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1399 题目大意:找到满足i*i*i+j*(j+1)*(j+2)/6形式且小于等于n的最大值. 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int n; 9 while(scanf("%d",&n),n) 10 { 11 int j,

HDU 3131 One…Two…Five! (暴力搜索)

题目链接:HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6=48),求所有结果中,含有'3'且该数字出现频率最大,若频率相等,输出数字最大的. 暴力解决之 AC代码: #include <stdio.h> #include <map> #include <string.h> #include <algorithm> #define LL __int64 u

hdu 2616 暴力使用 dfs求最短路径(剪枝有点依稀)

Kill the monster Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1241    Accepted Submission(s): 846 Problem Description There is a mountain near yifenfei’s hometown. On the mountain lived a big

(hdu step 4.2.7)Kill the monster(有n个技能,求杀死怪物的技能的最小使用次数。在使用某一个技能的时候,如果怪物的能量值hp&lt;=m,这时候造成的伤害值是原来的两倍)

题目: Kill the monster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 133 Accepted Submission(s): 97   Problem Description There is a mountain near yifenfei's hometown. On the mountain lived a big

hdu 1427 速算24点 dfs暴力搜索

速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次).游戏很简单,但遇到无解的

hdu 5024 Wang Xifeng&#39;s Little Plot【暴力dfs,剪枝】

2014年广州网络赛的C题,也是水题.要你在一个地图中找出一条最长的路,这条路要保证最多只能有一个拐角,且只能为90度 我们直接用深搜,枚举每个起点,每个方向进行dfs,再加上剪枝. 但是如果直接写的话,那一定会特别麻烦,再加上方向这一属性也是我们需要考虑的方面,我们将从别的地方到当前点的方向编一个号:往右为0,如下图顺时针顺序编号 (往右下方向为1,往下为2......以此类推) 我们知道了当前点的坐标,来到当前点的方向,以及到目前有没有拐弯,这几个属性之后,就可以记忆化搜索了,用一个四维数组

ACM 暴力搜索题 题目整理

UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vector> #include<cmath> #include<map> #include<algorithm> #include<cstring> #include<cstdio> #include<cstdlib> #include