UVALive 4256 Salesmen

题目大意:给你一个连通无向图,在给你一个序列,要求你把它转换成另一个序列,该序列两两点之间或者在图上是连通的,或者是相同的,要求修改的点数最小。

思路:典型的DP题,设d[ i ][ j ] 表示从1到第i个位置,以j为结尾的最小修改点数,那么状态转移方程为:d[ i ][ j ] = min( d[ i -1 ][ k ],j和k满足连通或者相等 )。

代码如下:

#include
#include
#include
using namespace std;

const int INF = 0x0fffffff ;

const int MAXN = 111 ;

int d[MAXN<<1][MAXN];

int map[MAXN][MAXN];

int num[MAXN<<1];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        memset(map,0,sizeof(map));
        for(int i = 1;i<=n;i++)
            map[i][i] = 1;
        int a,b;
        for(int i = 0;i


你可能感兴趣的:(动态规划)