POJ3411 状态dp+松弛转移
来源:互联网 发布:张北云计算产业基地 编辑:程序博客网 时间:2024/05/01 10:07
状态转移有两种,一种是对于一个状态v找出这个状态能够来自哪些状态u,然后更新v,但有时这种转移方法不太好用,那么考虑另一种转移方法,对于一个状态u,我们考虑状态u能够影响的所有状态v,然后不断松弛,像spfa一样...
这题就是第二种转移方法。
另外Inq标记数组确实能节省时间,毕竟减少了节点入队次数... 这题不加inq16ms,加上inq 0ms
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<fstream>using namespace std;#define INF 0x7fffffffint DP[15][1<<10];bool Inq[15][1<<10];struct Road{ int b,c,p,r; Road() {} Road(int b,int c,int p,int r) { this->b=b,this->c=c,this->p=p,this->r=r; }};vector<Road> Gra[15];int work(int n){ queue<int> q1,q2; int i,j,u,v,c,p,r,s; memset(Inq,0,sizeof(Inq)); for(i=0;i<10;++i) for(j=0;j<(1<<10);++j) DP[i][j]=INF; DP[0][1]=0,Inq[0][1]=true; q1.push(0),q2.push(1); while(!q1.empty()) { u=q1.front(); q1.pop(); s=q2.front(); q2.pop(); Inq[u][s]=false; for(i=0;i<Gra[u].size();++i) { v=Gra[u][i].b,c=Gra[u][i].c,p=Gra[u][i].p,r=Gra[u][i].r; if(s&(1<<c)) { if(DP[u][s]+p<DP[v][s|(1<<v)]) { DP[v][s|(1<<v)]=DP[u][s]+p; if(!Inq[v][s|(1<<v)]) { q1.push(v); q2.push(s|(1<<v)); Inq[v][s|(1<<v)]=true; } } } else { if(DP[u][s]+r<DP[v][s|(1<<v)]) { DP[v][s|(1<<v)]=DP[u][s]+r; if(!Inq[v][s|(1<<v)]) { q1.push(v); q2.push(s|(1<<v)); Inq[v][s|(1<<v)]=true; } } } } } int ans=INF; for(i=0;i<(1<<n);++i) { if((i&1)&&(i&(1<<(n-1)))) ans=min(ans,DP[n-1][i]); } return ans;}int main(){ int n,m,i,j,a,b,c,p,r,ans; scanf("%d %d",&n,&m); while(m--) { scanf("%d %d %d %d %d",&a,&b,&c,&p,&r); a--,b--,c--; Gra[a].push_back(Road(b,c,p,r)); } ans=work(n); if(ans==INF) printf("impossible\n"); else printf("%d\n",ans); return 0;}
- POJ3411 状态dp+松弛转移
- dfs。。状态压缩dp poj3411
- poj3411(状态压缩dp,dijkstra最短路)
- POJ 2686 (状态转移dp)
- POJ 3311 (状态转移dp)
- TSP状态转移[状态压缩DP]
- DP之状态和状态转移
- dp之状态和状态转移 2
- cf404D Minesweeper 1D 状态转移dp
- 51nod1455 宝石猎人【dp---状态转移】
- poj3411
- poj3411
- poj3411
- poj3411
- poj3411
- 【POJ2663Tri Tiling】状态压缩数位dp/矩阵状态转移
- DP问题各种模型的状态转移方程
- DP问题各种模型的状态转移方程
- 字符串系列——词典排序
- Oracle 索引访问方式
- mlockall函数
- sudoku
- 网络游戏服务器设计浅析
- POJ3411 状态dp+松弛转移
- Codeforces Round #171 (Div. 2)(完全)
- [每日译帖]创建Cinder卷时状态一直是creating,求解救
- Cocos2d-x 游戏中子弹的设计
- 关于对象流的一个测试
- Struts2入门到精通四——————Ognl详解
- Excel不同列多条件计数
- Struts2入门到精通五——————ValueStack讲解
- UML类图关系大全