重构一下就过了,不知道之前错在哪里。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull; const int INF=0x3f3f3f3f; int solve(); int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
solve();
} int dp[6][6][101][1<<11];
//dp[w][h][t][ch] 表示t时间xy处的接到西瓜状态为ch的最小步数 int g[6][6][101];
//g[w][h][t] 表示t时间xy处的西瓜有哪些 int h,w; inline void update(int x,int y,int t,int ost,int nst) {
if(g[x][y][t+1]&(1<<0))
return;
if(x>1)
dp[x][y][t+1][nst]=min(dp[x][y][t+1][nst],dp[x-1][y][t][ost]+1);
if(x<w)
dp[x][y][t+1][nst]=min(dp[x][y][t+1][nst],dp[x+1][y][t][ost]+1);
if(y>1)
dp[x][y][t+1][nst]=min(dp[x][y][t+1][nst],dp[x][y-1][t][ost]+1);
if(y<h)
dp[x][y][t+1][nst]=min(dp[x][y][t+1][nst],dp[x][y+1][t][ost]+1);
return;
} int solve() {
int T,sx,sy;
scanf("%d%d%d%d%d",&h,&w,&T,&sx,&sy);
int n,m;
scanf("%d%d",&n,&m); memset(g,0,sizeof(g)); int id=1;
for(int i=1; i<=n; i++) {
int t1,t2,a;
scanf("%d%d%d",&t1,&t2,&a);
for(int t=t1; t<t2; t++) {
int x,y;
scanf("%d%d",&x,&y);
if(a==1) {
g[x][y][t]|=(1<<id);
} else {
g[x][y][t]|=(1<<0);
}
}
if(a==1)
id++;
} /*for(int t=1; t<=T; t++) {
for(int nx=1; nx<=w; nx++) {
for(int ny=1; ny<=h; ny++) {
cout<<bitset<4>(g[nx][ny][t])<<" ";
}
cout<<endl;
}
cout<<endl;
}*/ if(g[sx][sy][1]&(1<<0)) {
printf("-1\n");
return 0;
} memset(dp,INF,sizeof(dp));
int ch=g[sx][sy][1]; dp[sx][sy][1][ch]=0; for(int t=1; t<T; t++) {
for(int nx=1; nx<=w; nx++) {
for(int ny=1; ny<=h; ny++) {
int nch=g[nx][ny][t+1];
if(nch&(1<<0))
continue;
for(int ch=0; ch<(1<<id); ch++) {
dp[nx][ny][t+1][ch]=min(dp[nx][ny][t+1][ch],dp[nx][ny][t][ch]);
}
}
}
for(int nx=1; nx<=w; nx++) {
for(int ny=1; ny<=h; ny++) {
int nch=g[nx][ny][t+1];
if(nch&(1<<0))
continue;
for(int ch=0; ch<(1<<id); ch++) {
update(nx,ny,t,ch,ch|nch);
}
}
}
} /*for(int t=1; t<=T; t++) {
printf("t=%d\n",t); for(int i=0; i<((1<<id)-1); i++) {
cout<<"i="<<bitset<10>(i)<<endl;
for(int nx=1; nx<=w; nx++) {
for(int ny=1; ny<=h; ny++) {
printf("%2d ",dp[nx][ny][t][i]!=INF?dp[nx][ny][t][i]:-1);
}
printf("\n");
}
cout<<endl;
}
printf("\n");
}*/ int ans=INF;
for(int nx=1; nx<=w; nx++) {
for(int ny=1; ny<=h; ny++) {
if(g[nx][ny][T]&(1<<0))
continue;
else {
ans=min(ans,dp[nx][ny][T][(1<<id)-2]);
}
}
} if(ans==INF)
ans=-1;
printf("%d\n",ans); return 0;
}

洛谷 - P3786 - 萃香抱西瓜 - 状压dp的更多相关文章

  1. [luogu P3786]萃香抱西瓜 [spfa][状态压缩]

    题目背景 伊吹萃香(Ibuki Suika)正在魔法之森漫步,突然,许多西瓜(Suika)从四周飞来,划出了绚丽的轨迹.虽然阵势有点恐怖,但她还是决定抱走一些西瓜. 题目描述 萃香所处的环境被简化为一 ...

  2. 【题解】洛谷P2704 [NOI2001] 炮兵阵地(状压DP)

    洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与 ...

  3. 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)

    洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...

  4. 洛谷P1171 售货员的难题【状压DP】

    题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄 ...

  5. 2018.07.18 洛谷P1171 售货员的难题(状压dp)

    传送门 感觉是一道经典的状压dp,随便写了一发卡了卡常数开了个O(2)" role="presentation" style="position: relati ...

  6. 洛谷P2761 软件补丁问题(状压dp)

    传送门 啊咧……这题不是网络流二十四题么……为啥是个状压dp…… 把每一个漏洞看成一个状态,直接硬上状压dp 然后因为有后效型,得用spfa //minamoto #include<iostre ...

  7. 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$

    正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...

  8. 洛谷 P2622 关灯问题II【状压DP】

    传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...

  9. UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)

    题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...

随机推荐

  1. [未完结]数字微分分析法的直线绘制(DDA)

    注意! 本文被第1次更新,可能存在后续更新 直线画法 直线的斜截式方程 在二维空间下,一条直线的方程可以被描述为若干种形式,其中比较常见的一种是斜截式方程: \[y=kx+b\] 其中\(k\)称为直 ...

  2. 在“云基础设施即服务的魔力象限”报告中,AWS 连续三年被评为领导者

    在"2014 云基础设施即服务的魔力象限"中.Gartner 将 Amazon Web Services 定位在"领导者象限"中,并评价 AWS 拥有最完整.最 ...

  3. HttpClient访问网络

    HttpClient项目时Apache提供用于访问网络的类,对访问网络的方法进行了封装.在HttpURlConnection类中的输入输出操作,统一封装成HttpGet.HttpPost.HttpRe ...

  4. 记一次FastJSON和Jackson解析json时遇到的中括号问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...

  5. Xcode工程断点调试失效

    1.我解决的是方法是,选择Product---->Edit Scheme------>(这里进入后会有Info,Arguments,Options,Diagnostics)选择Info-- ...

  6. 一套完整的前台页面增删改查以及js(easyui)

    增加页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  7. MySQL丨5.6版本插入中文显示问号解决方法

    解决办法: 1.找到安装目录下的my-default.ini 这个配置文件 2.copy一份粘贴到同目录下 另命名为my.ini 3.在my.ini 配置下加上下面几句代码 并保存 [mysql]de ...

  8. 【C/C++】函数指针

    首先必须要清楚如下: [1]函数指针即函数的地址,也就是存储其机器语言代码的首地址.该地址用函数名表示. [2]用具体的函数名给函数指针变量赋值时必须满足两者的类型(即函数返回值类型)和特征标(即函数 ...

  9. [ZJOI 2007] 捉迷藏

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1095 [算法] 首先建出点分树,然后每一个点开两个堆.“第一个堆记录子树中所有节点到 ...

  10. P1816 忠诚

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...