当前位置: 首页 > news >正文

HDU多校-交通管控

Problem - 7498 (hdu.edu.cn)

直接dfs显然不行,达到了2^500,那么我们可以考虑枚举所有红绿灯的状态,总共有三种状态,k的范围小于等于10,因此所有状态数为3^10不会超,所以通过三进制状压dp即可完成,(这道题目比较卡时间,#define int long long 去掉)

dp开二维,第一维记录前一种状态,第二维记录所有红绿灯状态,通过mp来判断前一种状态是否存在。

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f;
const int N = 2e5+5;
char a[505][15];
int dp[5][60050];//i有0,1两种状态,标记前一种状态是否存在
int mp[5][60050];
int bi[25];
int n,k,mod;void solve(){cin>>n>>k>>mod;int m = bi[k];for(int i=1;i<=n;i++){for(int j=0;j<k;j++){cin>>a[i][j];}}for(int i=1;i<=m;i++){dp[0][i]=0;dp[1][i]=0;mp[0][i]=0;mp[1][i]=0;}dp[0][0] = 1;mp[0][0] = 1;for(int i=1;i<=n;i++){for(int j=m-1;j>=0;j--){//三进制枚举所有状态int s = j;for(int p=0;p<k;p++){int num = s/bi[p];int kk = num % 3LL;s -= bi[p] * kk;if(a[i][p]=='-'){//反向减去,查找前一种状态kk = (kk+1)%3LL;}else if(a[i][p]=='+'){kk = (kk+2)%3LL;}s += bi[p] * kk;}if(mp[(i+1)%2][s]||mp[(i+1)%2][j])mp[i%2][j] = 1;//用或不用dp[i%2][j] = (dp[(i+1)%2][j] + dp[(i+1)%2][s]) % mod;}}map<string,int>mpp;for(int i=0;i<=m-1;i++){string ss;//字符串枚举if(mp[(n%2)][i]==0)continue;for(int j=0;j<k;j++){int num = i / bi[j];int yu = num%3;if(yu == 0)ss+='A';else if(yu == 1)ss+='B';else ss += 'C';}mpp[ss] = (dp[(n%2)][i])%mod;}for(auto &t:mpp){cout<<t.first<<" "<<t.second<<"\n";}}signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);bi[0] = 1;for(int i=1;i<=10;i++){bi[i] = bi[i-1] * 3LL;}int t=1;cin>>t;while(t--){solve();}return 0;
}

http://www.lryc.cn/news/416587.html

相关文章:

  • 【C++】string类
  • Python中各类常用内置转换函数
  • LangChain与JWT:构建安全认证的桥梁
  • ai写作软件哪个好用?怎么帮自己找到好用的ai写作软件?
  • 关于gunicorn+flask+docker模型的高并发部署
  • 35. 搜索插入位置
  • ViT论文详解
  • 常见中间件漏洞(三、Jboss合集)
  • ios如何动态添加控件及动画
  • 【数学建模】——【A题 信用风险识别问题】全面解析
  • javascript:检测图片的宽高
  • 机械学习—零基础学习日志(高数23——无穷小运算)
  • 一个网络上计算机的通信
  • C语言基础题:吃冰棍(C语言版)
  • C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结
  • Python处理Redis
  • nodejs多版本随心切换-windows
  • json文件格式
  • 日撸Java三百行(day15:栈的应用之括号匹配)
  • Oracle-OracleConnector
  • 『 Linux 』线程池与 POSIX 线程的封装编码实现
  • 【C++】————哈希表
  • 前端学习AI历程
  • 常见中间件漏洞复现之【Tomcat】!
  • C++并发编程(一):线程基础
  • enq: HW - contention事件来啦
  • MyBatis补充
  • 系统架构师(每日一练16)
  • 实践致知第17享:电脑忽然黑屏的常见原因及处理方法
  • 微信小程序--实现地图定位---获取经纬度