• 1044 状态压缩·一


    m很小,可以用状态压缩做法,最多1<<m个状态,i每右移一位,状态随着要左移一位,判断q的限制,只需判断当前状态二进制中1的个数即可
    
     
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    int d[1010][2048];
    //求整数二进制中1的个数
    bool is_state_ok(int s,int q)
    {
        int c = 0;
        for(; s; c++)
        {
            s &= (s-1);
        }
        return c <= q;
    }
    
    int w[2048];
    
    int main(){
    
        //freopen("1.txt","r",stdin);
    
        int n,m,q;
        scanf("%d %d %d",&n,&m,&q);
        for(int i = 0; i < n; i++)
            scanf("%d",&w[i]);
    
        int MASK = (1<<m)-1;
    
        int maxn = 0;
        memset(d,0,sizeof(d));
    
        d[0][0] = 0; d[0][1] = w[0];
        for(int i = 1; i < n; i++)
            for(int j = 0; j <= MASK; j++)
                if(is_state_ok(j&MASK,q))
                {
                    int state = (j<<1) & MASK;
                    d[i][state] = max(d[i][state],d[i-1][j]);
                    int state2 = (j<<1) & MASK | 1;
                    if(is_state_ok(state2,q))
                    {
                        d[i][state2] = max(d[i][state2],d[i-1][j]+w[i]);
                    }
                }
        for(int j = 0; j <= MASK; j++)
            maxn = max(maxn,d[n-1][j]);
        printf("%d
    ",maxn);
        return 0;
    }
    
     
  • 相关阅读:
    zz如何防止拖延
    Matlab中统计矩阵中相同元素的个数
    深度学习(Deep Learning)算法简介
    深度学习(Deep Learning)综述
    端午节的说说
    .net 开发 配置文件的灵活使用
    2005
    那一天 That day
    女 孩 的 心 思
    Wind Flowerlove
  • 原文地址:https://www.cnblogs.com/zendu/p/4980766.html
Copyright © 2020-2023  润新知