首页 > 其他分享 >BZOJ 4145 [AMPPZ2014]The Prices (状压DP)

BZOJ 4145 [AMPPZ2014]The Prices (状压DP)

时间:2023-02-21 10:07:46浏览次数:45  
标签:const 4145 scanf 状压 ++ int state AMPPZ2014 now


题意

你要购买商店,你到第i家商店的路费为BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度,在第BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_c++_02家商店购买第BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_03种物品的费用为BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_最小值_04,求最小总费用。

分析
  • 很容易定义出状态,BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_05表示到第BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_06行,买的物品情况为BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_07的最小费用。按照往常的套路是转移时枚举子集,但那样的时间复杂度是BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_08太慢了,于是我们只需要现将上一次的所有BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_最小值_09复制到BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_05,然后在第BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_06行每一个数考虑取不取就行了。因为这一行可以不选,最后再与BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_最小值_12取一个最小值。时间复杂度BZOJ 4145 [AMPPZ2014]The Prices (状压DP)_时间复杂度_13
AC代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int MAXM = 16;
const int MAXS = 65536;
int n, m, d[MAXN], cost[MAXN][MAXM], f[2][MAXS];
int main () {
scanf("%d%d", &n, &m);
for(int i = 0; i < n; ++i) {
scanf("%d", &d[i]);
for(int j = 0; j < m; ++j)
scanf("%d", &cost[i][j]);
}
int now = 0;
memset(f[now], 0x3f, sizeof f[now]); f[now][0] = 0;
for(int i = 0; i < n; ++i) { now ^= 1;
for(int state = 0; state < (1<<m); ++state)
f[now][state] = f[now^1][state] + d[i];
for(int j = 0; j < m; ++j)
for(int state = 1; state < (1<<m); ++state) if((state>>j)&1)
f[now][state] = min(f[now][state], f[now][state^(1<<j)] + cost[i][j]);
for(int state = 0; state < (1<<m); ++state)
f[now][state] = min(f[now][state], f[now^1][state]);
}
printf("%d\n", f[now][(1<<m)-1]);
}


标签:const,4145,scanf,状压,++,int,state,AMPPZ2014,now
From: https://blog.51cto.com/u_15973510/6075814

相关文章

  • HDU 5418 Victor and World 状压DP的TSP问题
     VictorandWorldTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:262144/131072K(Java/Others)TotalSubmission(s):1855    AcceptedSubmission......
  • Luogu P4145 上帝造题的七分钟 2 / 花神游历各国 题解
    Luogu链接:上帝造题的七分钟2/花神游历各国${\scr\color{Orchid}{\text{Solution}}}$题目大意支持两种操作:区间开方(向下取整)区间求和分析发现线段树容易实......
  • 状压 DP(ZR)
    [PKUSC2018]最大前缀和从部分分出发考察性质,“满足a中至多一个负数”怎么做?好吧这个很简单,但是它提醒我们从负数的POV考虑。不难发现,最大前缀和的结束为止一定是某个......
  • 状压 DP
    概述状压DP是以状态含有某种意义上的状态压缩为特点的一类DP。所谓状态压缩,通常指的是将各个元素的状态从常规的vector等编码映射为一个\(id\)即抽象的状态。......
  • 【新生寒训】day 10 状压dp2
    【新生寒训】day10状压dp2果咩纳塞米娜桑!!!!我选的太难了......
  • #2153. 「SCOI2005」互不侵犯(状压DP)
    #2153.「SCOI2005」互不侵犯解题思路令dp[i][j][k]表示第i行的状态为j时,共放置k个国王的方案数。状态j的二进制即表示该行的放置方式,例如j为3时,放置的方式为101,即从右......
  • 2021年蓝桥杯A组省赛-回路计数 【状压dp】
    题面分析单源最短Hamilton路径的状压dp模板题。\(dp[i][j]\)表示终点为\(j\),经过的点集状态为\(i\)的方案数。假设状态由\(k\)转移到\(j\)。当前计算\(dp[i][j]\),那么i......
  • 【转载】状压dp入门指引 by 高中时期的我自己
    原文链接目录-1.前言0.概述1.位运算(建议初学者认真研究,这是基础)2.常用的计算方法:(建议认真食用,灵活运用)重点:用二进制表示的集合的基本运算(有待补充)其他运算3.状......
  • hdu4739 Zhuge Liang's Mines --状压dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=4739​​题意:n个点,求出可以组成的最多的正方形的点数,要求每个点只能用一次,且正方形边平行坐标轴。分析:把所有点组......
  • hdu5135 Little Zu Chongzhi's Triangles --状压dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=5135​​题意:n根木棒,组成若干三角形,求最大面积和。分析:把所有木棒升序排序,可以组成三角形所有的的组合利用位运算......