hdu 2616【Kill the monster】

写的程序运行时间不给力~_~……

我用二进制表示状态做的……代码中解释……

代码如下:
 1 #include <iostream>
 2 using namespace std;
 3 
 4 struct spell
 5 {
 6     int ai,mi;
 7 }ss[12];
 8 int n,HP;
 9 int minn;
10 
11 void dfs(int x,int hp)
12 {
13     if(hp <= 0)//当hp值要小于等于0时,查看x中有多少个1,即用了多少个spell
14     {
15         int res = 0;
16         for(int i = 0;i < n;i ++)
17         {
18             if(x & (1 << i))
19                 res ++;
20         }
21         if(minn == -1 || minn > res)
22             minn = res;
23         return ;
24     }
25     if(x == (1 << n) - 1)//当全部用完了就要返回了
26         return;
27     for(int i = 0;i < n;i ++)
28     {
29         if(!(x & (1 << i)))//如果该spell没有用过就将该spell加进去用
30         {
31             int xx = x | (1 << i);
32             if(hp <= ss[i].mi)
33             {
34                 dfs(xx ,hp - ss[i].ai * 2);
35             }
36             else
37             {
38                 dfs(xx,hp - ss[i].ai);
39             }
40         }
41     }
42 }
43 
44 int main()
45 {
46     while(cin >> n >> HP)
47     {
48         for(int i = 0;i < n;i ++)
49         {
50             cin >> ss[i].ai >> ss[i].mi;
51         }
52 
53         minn = -1;
54         dfs(0,HP);
55         cout << minn << endl;
56     }
57 
58     return 0;
59 }

转载于:https://www.cnblogs.com/Shirlies/archive/2012/08/03/2621850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值