首页 > 其他分享 >状压DP

状压DP

时间:2024-04-04 18:35:27浏览次数:17  
标签:int ll 状压 long DP dp

CF580D

题目链接
https://codeforces.com/problemset/problem/580/D
题目大意
image
思路
令dp[i][j]表示,吃菜状态为i,且最后一道菜为j的最大满足感!
代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 20;
int n, m, t, q;
int a[N],b[N * N][N * N];
ll dp[1 << N][N],ans;
// dp[i][j]表示状态为i时,吃最后一道菜为j时获得的最大满足感!
void solve() {
    cin >> n >> m >> q;
    for(int i = 0;i < n;++i) {
        cin >> a[i];
        dp[1 << i][i] = a[i];
    }
    for(int i = 0;i < q;++i){
        int x,y,c;cin >> x >> y >> c;
        --x;--y;
        b[x][y] = c;
    }
    for(int i = 0;i < (1 << n);++i){
        for(int j = 0;j < n;++j){
            // i 不 包 含 j
            if((i &(1 << j)) == 0) continue;
            for(int k = 0;k < n;++k){
                // i 中 不 包 含 k
                if(j == k || (!(i &(1 << k)))) continue;
                // j 从 k 转移过来
                dp[i][j] = max(dp[i][j],dp[i ^ (1 << j)][k] + a[j] + b[k][j]);
            }
            if(__builtin_popcount(i) == m){
                ans = max(ans,dp[i][j]);
            }
        }
    }
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    t = 1;
    for (int _ = 0; _ < t; _++)
        solve();
    return 0;
}

标签:int,ll,状压,long,DP,dp
From: https://www.cnblogs.com/gebeng/p/18114458

相关文章

  • 数位DP
    数位DP一般解决的问题一般是位数极大,之和组成这个数的数字有关一般要维护\(:\)填到第几个数字,是否有限制。MagicNumbers令\(F(x)\)表示\(\lex\)的满足条件元素数量可以发现,答案\(F(r)-F(l-1)\)状态\((i,md,flag1,falg2,sum)\)表示填了前\(i\)个数......
  • GDPU 竞赛技能实践 天码行空6
    ......
  • 网络基础二——传输层协议UDP与TCP
    九、传输层协议​传输层协议有UDP协议、TCP协议等;​两个远端机器通过使用"源IP",“源端口号”,“目的IP”,“目的端口号”,"协议号"来标识一次通信;9.1端口号的划分​0-1023:知名端口号,HTTP,HTTPS,FTP,SSH等应用层协议,他们的端口号都是固定的;如:ssh使用的是22号端口,ftp(rzsz使......
  • ffmpeg tcp/udp 拉流
    参考文章:ffmpeg命令分析-拉取TCP流FFmpeg实现rtp推流ffmpeg除了拉取rtsp,hsl等协议外,也支持直接通过tcp/udp推拉流url格式为udp://ip:port或tcp://ip:port注意:udp或tcp有主被动的概念:主动:自己作为客户端,从服务端拉流被动:自己作为服务端,等待客户端推流直接使用tcp/u......
  • 测试UDP端口是否开放
    软件下载地址:https://nmap.org/download.htmlwindows安装后,添加下系统路径 命令说明:>ncat-hNcat7.94(https://nmap.org/ncat)Usage:ncat[options][hostname][port]Optionstakingatimeassumeseconds.Append'ms'formilliseconds,'s'forsec......
  • 蓝桥杯算法集训 - Week 5:树状数组、各类DP算法
    蓝桥杯算法集训-Week5本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、树状数组树状数组是一种数据结构,可以快速地完成以下两个操作:将第i个数加上c快速求前缀和,即任意区间[i,j]的和Ⅰ、代码模板//树状数组长度......
  • 动态规划---线性dp1
    7-3最大子序列总和给定K个整数序列{N1,N2,...,NK}。连续子序列定义为{Ni,Ni+1,...,Nj},其中1≤i≤j≤K。最大子序列是具有最大元素总和的连续子序列。例如,给定序列{-2,11,-4,13,-5,-2},其最大子序列为{11,-4,13},最大和为20。现在,您应该找到最大的总和,以及......
  • java中获取项目路径包路径域名classpath路径buildPath路径
    /** *获取项目路径 *@returnnull或项目路径 *@throwsIOException */ publicstaticStringgetPojectPath(){ Filedirectory=newFile("");//参数为空 try{ returndirectory.getCanonicalPath(); }catch(IOExceptione){ e.printStackT......
  • 动态规划区间DP
    动态规划区间DP普通区间DP石子合并(蓝桥官网1233)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=300;intn,a[N],s[N],f[N][N];signedmain(){cin>>n;memset(f,127,sizeof(f));//初始化f为较大值for(inti=1;i<=......
  • P7219 [JOISC2020] 星座 3【笛卡尔树+整体dp】
    P7219[JOISC2020]星座3笛卡尔树+整体dp(线段树合并维护dp)考虑转化题意,不存在矩形为星座,即对于每个极大矩形中都只有一颗星星。而观察题目的方格,对于两个位置是否能够成为一个矩形,只和两个位置的区间最大值(小白船的位置)有关①。图中的红蓝矩形即为两个极大矩形。将删除星......