[BZOJ3185][Coci2011][DP]kamion
来源:互联网 发布:淘宝 诚信荣誉 编辑:程序博客网 时间:2024/06/05 09:22
考虑转化一下问题
令
那么转移就是
但是这个DP时间复杂度是
那么转移就变成
这样每次转移就优化到
那至于怎么求出原题的答案,原题解很抠,没有给出…
需要再引入一个函数
转移还是
因为神奇的g函数,这样转移的正确也就保证了……
#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#define N 55#define P 10007#define foc(x,a) for(ITR x=a.begin();x!=a.end();x++)using namespace std;typedef pair<int,int> parii;typedef vector<parii>::iterator ITR;int n,m,K,Ans;char A[100];int f[N][N][N][2],g[N][N][N];vector<parii> load[N][30],unload[N][30];vector<parii> road[N],iroad[N];inline void Read(){ gets(A); int x,y,cnt; char c; cnt=sscanf(A,"%d %d %c",&x,&y,&c); if(cnt==2){ road[x].push_back(parii(x,y)); iroad[x].push_back(parii(x,y)); } else if(c>='A'&&c<='Z'){ load[x][c-'A'].push_back(parii(x,y)); iroad[x].push_back(parii(x,y)); } else unload[y][c-'a'].push_back(parii(x,y));}int main(){ scanf("%d%d%d",&n,&m,&K); gets(A); for(int i=1;i<=m;i++) Read(); for(int i=1;i<=n;i++) f[i][i][0][0]=f[i][i][0][1]=1; for(int k=1;k<=K;k++){ if(k>=2) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int t=0;t<26;t++) foc(x,load[i][t]) foc(y,unload[j][t]) (g[i][j][k]+=f[x->second][y->first][k-2][0])%=P; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int s=0;s<2;s++){ if(s) foc(x,iroad[i]) (f[i][j][k][s]+=f[x->second][j][k-1][s])%=P; else foc(x,road[i]) (f[i][j][k][s]+=f[x->second][j][k-1][s])%=P; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int s=0;s<2;s++) for(int x=1;x<=n;x++) for(int t=2;t<=k;t++) (f[i][j][k][s]+=g[i][x][t]*f[x][j][k-t][s])%=P; (Ans+=f[1][n][k][1])%=P; } return printf("%d\n",Ans),0;}
0 0
- [BZOJ3185][Coci2011][DP]kamion
- coci2011 debt 还债
- 【coci2011/2012 3】距离之和
- COCI2011/2012 Contest#1 F Solution
- [BZOJ3189][Coci2011][扫描线][线段树]Slika
- 2017.5.15 COCI2011/2012 Contest#5
- jzoj P1667【coci2011/2012 1】PLES
- jzoj P1664 【coci2011/2012 1】JABUKE
- jzoj P1665 【coci2011/2012 1】MATRIX
- [BZOJ1894][COCI2011-2012第7场]总统演讲
- dp
- dp
- dp
- 【DP】
- dp
- dp
- DP
- DP
- 大数据串讲-从日志文件分析访问量最高的10个接口及响应访问量
- 从tcp到led
- 二叉排序树(二叉查找树)BST构造,节点插入,节点查找,节点删除(java)
- 结构化查询语言分类
- CF Educational Round 19 797 (F题DP+RMQ)以后补
- [BZOJ3185][Coci2011][DP]kamion
- JAVA中堆和栈的区别
- Android设计模式之单例模式
- ZOJ2316 Matrix Multiplication(找规律)
- 进程与进程描述符(task_struct)
- spring mvc 使用kaptcha生成验证码
- 搭建Samba服务RHCE-Day7
- 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印
- Spring Boot集成kafka笔记