• 【Henu ACM Round#14 D】Kefa and Dishes


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    状态压缩动规。 可以写成记忆化搜索的形式。 f[bit][p] 表示选取的菜的情况为bit(用0..2^(N)-1的二进制形式表示各个菜有没有选 然后上一道菜选的是第p道菜,剩下的菜选够m道的话能够获得的最大满意度. 显然这两个状态能够唯一确定接下来的的最大满意度。 且接下来如果再遇到这个状态,就不用重新算了。直接返回上次的答案就好 (这就是记忆化搜索的思想。 转移的时候,通过上一次的选择和这一次的选择。 把转移时产生的额外满意度加上就好。

    【代码】

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    const int N = 18;
    
    ll f[(1<<N)+10][N+10];
    int n,m,k,a[N+10];
    int inc[N+10][N+10];
    
    ll dfs(int bit,int pre,int tot){
        ll &cur = f[bit][pre];
        if (cur!=-1){
            return cur;
        }
        if (tot==m+1){
            return 0;
        }
    
        for (int i = 1;i <= n;i++){
            if (bit&(1<<(i-1))) continue;
            cur = max(cur,dfs(bit|(1<<(i-1)),i,tot+1)+a[i]+inc[pre][i]);
        }
    
        return cur;
    }
    
    int main()
    {
        #ifdef LOCAL_DEFINE
            freopen("rush.txt","r",stdin);
        #endif // LOCAL_DEFINE
        ios::sync_with_stdio(0),cin.tie(0);
        cin >> n >> m >> k;
        for (int i = 1;i <= n;i++)  cin >> a[i];
        for (int i = 1;i <= k;i++){
            int x,y,z;
            cin >> x >> y >> z;
            inc[x][y] = z;
        }
        memset(f,255,sizeof f);
        cout <<dfs(0,0,1)<<endl;
        return 0;
    }
    
  • 相关阅读:
    SSH公/私秘钥的生成及使用
    使用docker-compose部署Kafka集群
    使用docker或者docker-compose部署Zookeeper集群
    zookeeper相关概念
    redis相关概念
    mq-rabbitmq
    mysql事务隔离级别
    新自动化测试框架+微信机器人构建思路
    当eclipse调用tomcat的时候发生了什么?
    .net 获取配置项
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8341144.html
Copyright © 2020-2023  润新知