RCC 2014 Warmup div2 D--状压dp

题意:给出n,m,b分别代表这货的朋友数,题目数和单个monitor的花费;

下来有2*n行,分别是做题要花的钱,monitor的个数还有朋友们能解决问题的个数;

再下来是能解决问题的编号;然你做完这些题这货所需要的最少的钱。


思路:显然,对monitor个数由小到大排序,因为前面需要的monitor比较少,如果能解决完问题的话花钱比较少,由少到多递推,注意m<=20,所以可以用二进制表示集合,第一次正是写状压dp。各种错误。注意集合i可以用1<<i表示,还有就是移位运算符优先级比较低,多用括号,|对应集合的并;  
用dp[i]表示解决i个问题需要的最少的钱数即可。

/****************************
* author:crazy_石头
* date:2014/04/21
* time:124 ms 
* algorithm:状压dp 
* Pro:CF 417 D
***************************/
#include 
    
     
#include 
     
      
#include 
      
       
#include 
       
        
#include 
        
          #include 
         
           #include 
          
            #include 
           
             using namespace std; #define INF 1LL<<60 #define eps 1e-8 #define A system("pause") #define rep(i,h,n) for(int i=(h);i<=(n);i++) #define ms(a,b) memset((a),(b),sizeof(a)) const int maxn=20; const int maxm=150; __int64 dp[(1<
            
             >n>>m>>b; rep(i,0,n-1) { cin>>d[i].price>>d[i].monitor>>c; d[i].pro_num=0; rep(j,0,c-1) { int x; cin>>x; d[i].pro_num|=(1<<(x-1));//转化为集合存储; } } sort(d,d+n,cmp);//按显示器数量排序; rep(i,0,(1<
             
            
           
          
         
        
       
      
     
    

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名码农、

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值