POJ 3592 Instantaneous Transference 题目链接 题意:一个图.能往右和下走,然后有*能够传送到一个位置.'#'不能走.走过一个点能够获得该点上面的数字值,问最大能获得多少 思路:因为有环先强连通缩点.然后问题转化为dag,直接dp就可以 代码: #include <cstdio> #include <cstring> #include <vector> #include <algorithm> #include <st…
Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6204   Accepted: 1389 Description It was long ago when we played the game Red Alert. There is a magic function for the game objects which is called instantaneous…
http://poj.org/problem?id=3592 题意 :给你一个n*m的矩阵,每个位置上都有一个字符,如果是数字代表这个地方有该数量的金矿,如果是*代表这个地方有传送带并且没有金矿,可以传送到指定的位置,如果是#代表该位置不可走,初始位置在左上角,只能向下或向右走,并且走到传送带的时候可选择是否传送.问当走出去的时候能获得的最大近况数是多少. 思路 :先将二维矩阵转化成一维的点建图,可以向下向右建图,而且传送带也可以建边,缩点之后再建边,最后用spfa求最长路. #include…
http://poj.org/problem?id=3592 #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define maxn 300000 using namespace std; <<; ][],num,gg[maxn],point[maxn],cc[maxn],ee,head1[maxn],dis[maxn],cnt[maxn],t…
题目链接 给一个n*m的图, 从0, 0这个点开始走,只能向右和向下. 图中有的格子有值, 求能获得的最大值. 其中有些格子可以传送到另外的格子, 有些格子不可以走. 将图中的每一个格子都看成一个点, 然后对它右边和下边的点连边, 如果是'#’就continue,  如果可以传送, 那么就对传送到的那个点连边, 同时也要向右边和下边连边, 因为可以选择不传送. 然后缩点求最长路就可以. 一个数组没有初始化RE了好多发..... #include <iostream> #include <…
http://poj.org/problem?id=3592 题意:给出一个n*m的矩阵,左上角代表起始点,每个格子都有一定价值的金矿,其中‘#’代表岩石不可达,‘*’代表时空门可以到达指定格子,求出可以获得的最大价值. 思路:时空门的存在可能会使得图中出现环,所以先对强连通分量进行缩点,然后对于缩点后的连通分量建立有向无环图,spfa求到起始点的最长路. #include <stdio.h> #include <iostream> #include <string.h>…
题目链接: id=3592">poj3592 题意: 给出一幅n X m的二维地图,每一个格子可能是矿区,障碍,或者传送点 用不同的字符表示: 有一辆矿车从地图的左上角(0,0)出发,仅仅能往右走或往下走,或者通过传送点  选择是否 传送到特定地点 採过的矿的格子 矿会消失;问这辆矿车最多能採多少矿 解题思路: 首先又一次建图,将图中二维的顶点压缩成一维的顶点             (方便Tarjan算法) 每一个顶点往右,下的顶点建边,传送点的格子往特定顶点建边(建边的两端不能有障碍)…
[POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted: 2222 Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, -, 2n. In each round of the tournament, all tea…
poj  3311(状态压缩DP) 题意:一个人送披萨从原点出发,每次不超过10个地方,每个地方可以重复走,给出这些地方之间的时间,求送完披萨回到原点的最小时间. 解析:类似TSP问题,但是每个点可以重复走,先用floyd预处理每个点两两之间的最短距离,然后用状态压缩DP求出走完所有点后回到原点的最短距离,用一个二进制数表示城市是否走过. 状态表示:dp[i][j]表示到达j点状态为i的最短距离 状态转移方程:dp[i][j]=min(dp[i][j],dp[j'][k]+dis[k][j]),…
poj  1185(状态压缩DP) 题意:在一个N*M的矩阵中,‘H'表示不能放大炮,’P'表示可以放大炮,大炮能攻击到沿横向左右各两格,沿纵向上下各两格,现在要放尽可能多的大炮使得,大炮之间不能相互攻击. 解析:可以发现,对于每一行放大炮的状态,只与它上面一行和上上一行的状态有关,每一行用状态压缩的表示方法,0表示不 放大炮,1表示放大炮,同样的,先要满足硬件条件,即有的地方不能放大炮,然后就是每一行中不能有两个1的距离小于 2(保证横着不互相攻击),这些要预先处理一下.然后就是状态表示和转移…