题目链接

大概意思就是Q的体力,n个烧烤店,m个特殊的,要去至少k个。
告诉了我们各个点的到达方案数的情况下,求解恰好Q体力且经过至少K个特殊烧烤店的方案数。

问题分析: n很小,但有50,直接状态压缩不可取。 m k只有10
我们先要想想怎么设计状态,状态由什么转移。
特殊烧烤店显然要靠状态压缩,然后我们还需要体力的状态,emm还缺点什么是吧。我们再定义一维表示以 X 为终点的状态。好像差不多了。
定义dp[【0~ 1<<m】][t][j] 为状态下,恰好花费了t点体力且到达j 的方案数
我们的体力必须完全更新了才能进入下一步,即体力在最外层枚举。然后是枚举状态,枚举上一步的到达点,枚举下一步的到达点。
具体请见代码细节;

 #include<bits/stdc++.h>
#include<stdlib.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<time.h>
#include <cstdio>
#include <iostream>
#include <vector>
#define ll long long
#define int long long
#define inf 0x3f3f3f3f
#define mods 20190802
#define modd 998244353
#define PI acos(-1)
#define fi first
#define se second
#define lowbit(x) (x&(-x))
#define mp make_pair
#define pb push_back
#define si size()
#define E exp(1.0)
#define fixed cout.setf(ios::fixed)
#define fixeds(x) setprecision(x)
#define IOS ios::sync_with_stdio(false);cin.tie(0)using namespace std;ll gcd(ll a,ll b){if(a<0)a=-a;if(b<0)b=-b;return b==0?a:gcd(b,a%b);}
template<typename T>void read(T &res){bool flag=false;char ch;while(!isdigit(ch=getchar()))(ch=='-')&&(flag=true);
for(res=ch-48;isdigit(ch=getchar());res=(res<<1)+(res<<3)+ch - 48);flag&&(res=-res);}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
ll qp(ll a,ll b,ll mod){ll ans=1;if(b==0){return ans%mod;}while(b){if(b%2==1){b--;ans=ans*a%mod;}a=a*a%mod;b=b/2;}return ans%mod;}//快速幂%
ll qpn(ll a,ll b, ll p){ll ans = 1;a%=p;while(b){if(b&1){ans = (ans*a)%p;--b;}a =(a*a)%p;b >>= 1;}return ans%p;}//逆元   (分子*qp(分母,mod-2,mod))%mod;ll cnt[60];
ll G[60][60];
ll dp[(1<<12)][51][51];
//ll num=0;
ll kk;
ll m;
ll check(ll x)
{ll nu=0;for(int i=0; i<m; i++){if(((1<<i)&x))nu++;}return nu>=kk;}
signed main()
{ll n,Q;read(n);read(m);read(kk);read(Q);for(int i=1; i<=m; i++){ll x;read(x);x--;cnt[x]=i;//特殊}for(int i=0; i<n; i++){for(int j=0; j<n; j++){read(G[i][j]);}}dp[0][0][0]=1;//状态/Q/终点for(int t=0; t<Q; t++){// 体力for(int j=0; j<(1<<m); j++){//状态for(int k=0; k<n; k++){// 上轮到达if(cnt[k]&&!(j&(1<<(cnt[k]-1))))continue;if(!dp[j][t][k])continue;for(int p=0; p<n; p++){if(!G[k][p])continue;if(cnt[p]){ll ok=j|(1<<(cnt[p]-1));dp[ok][t+1][p]+=(dp[j][t][k]%mods*G[k][p]%mods)%mods;}else{dp[j][t+1][p]+=(dp[j][t][k]%mods*G[k][p]%mods)%mods;}}}}}ll ans=0;for(int i=0; i<(1<<m); i++){if(check(i)){for(int j=0; j<n; j++){ans=(ans+dp[i][Q][j])%mods;}}}printf("%lld",ans);}

CSUSTOJ 我爱吃烧烤 (状压dp)相关推荐

  1. P1433 吃奶酪(状压dp)

    洛谷 / 题目列表 / 题目详情 P1433 吃奶酪 提交 23.28k 通过 9.30k 时间限制 1.00s 内存限制 125.00MB 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问 ...

  2. 【每日一题】洛谷 p1433 吃奶酪 状压dp

    - [P1433 吃奶酪](https://www.luogu.com.cn/problem/P1433) 换一种类型,这次求长度最小值,(n<15)接着状压 题目:房间里放着 nn 块奶酪.一 ...

  3. CSUST 2007 我爱吃烧烤 (状压dp)

    链接: 我爱吃烧烤 题意: 总共 n 家烧烤店,有 m 家特殊烧烤店,从 i 到 j 号烧烤点有 mp [ i ] [ j ] 种方案,消耗一点体力值,问消耗 q 点体力值且至少经过 k 家特殊烧烤店 ...

  4. CSUST 2007-我爱吃烧烤(状压DP)

    题目链接:http://acm.csust.edu.cn/problem/2007 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13395416.ht ...

  5. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  6. 【状压DP】吃货JYY(luogu 6085)

    正题 luogu 6085 题目大意 给你一个无向图,其中有一些边是必须走的,问你从1开始走,经过所有必须走的边,然后回到1的最短路径 解题思路 n很小,可以先用Floyd跑出两个点之间的最短路 然后 ...

  7. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

  8. Codeforces ----- Kefa and Dishes [状压dp]

    题目传送门:580D 题目大意:给你n道菜以及每道菜一个权值,k个条件,即第y道菜在第x道后马上吃有z的附加值,求从中取m道菜的最大权值 看到这道题,我们会想到去枚举,但是很显然这是会超时的,再一看数 ...

  9. 【BZOJ-1097】旅游景点atr SPFA + 状压DP

    1097: [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MB Submit: 1531  Solved: 352 [Submit][S ...

最新文章

  1. 用数据分析蔡徐坤1亿转发量幕后推手被封后能否动摇饭圈文化?
  2. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
  3. 你不能错过这些美食!
  4. Mac入门--如何使用brew安装多个PHP版本
  5. linux从别的主机下载,从局域网内的其他Linux主机下载文件
  6. 简单的后台管理系统vue-cli3.0+element-ui
  7. python 放射 水平_基于Python的放射性核素大气扩散程序初步开发与验证
  8. 编译文件出错fatal error: GL/glew.h: No such file or directory
  9. IIS Express局域网访问配置
  10. 什么情况下使用weak关键字,相比assign有什么不同
  11. ucgui添加自定义汉字库
  12. 同人游戏开发工具巡礼——AVG(ADV)引擎篇
  13. html表单中文字前黑点怎么弄,如何将word文档中标题前的黑点去掉
  14. 魅族路由器极速版刷机_魅族路由器极速版最真实的体验评测
  15. 故障电弧检测技术现状及难点
  16. HIFIVE音乐开放平台音乐api接口文档!
  17. 零基础 学 零知识证明
  18. golang gin框架gorilla的websocket小案例
  19. set,setenv和export
  20. 人机融合智能的新思考

热门文章

  1. NTP for Linux
  2. 树莓派使用红外收发(一):设备安装
  3. glusterfs Connection failed. Please check if gluster daemon is operational. 解决方法
  4. 癌症新发现,癌细胞像熊一样冬眠以逃避化疗
  5. CSS基础(13)- 更多的选择器
  6. 初识linux之shell外壳与基本权限
  7. 【调剂】中国矿业大学人工智能(知识工程)方向招收2020调剂生
  8. Kotlin Compose 状态恢复 rememberSaveable 与 remember
  9. 如何低成本挖掘App商店的免费资源
  10. webpack打包工具学习(前端构建工具)