• hdu 1584 蜘蛛纸牌 搜索 分治 动态规划


    搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1584

     枚举每张未移动的牌 移动到后面的第一张未移动的牌上去 比如要移动1 而 2  3  4 都移动过了 就把1移动到 5上去 因为 2 3 4 一定都移动到了 5上面

    #include<iostream>
    #include<string.h>
    #include<math.h>
    using namespace std;
    int a[12],vis[12],min1;

    void dfs(int cur,int temp)
    {
        int i,j;
        if(temp>=min1)   
            return ;    //剪枝 相当重要 没有很容易超时
        if(cur==9)    //十张牌只要移动九次就可以了
        {
            min1=temp;
            return ;
        }
        for(i=1;i<10;i++)  //第cur次移动  移动i牌
            if(!vis[i])
            {
                for(j=i+1;j<=10;j++)
                    if(!vis[j])
                    {
                        vis[i]=1;
                        dfs(cur+1,temp+abs(a[i]-a[j]));
                        break;
                    }
                vis[i]=0;
            }
            return ;
    }

    int main()
    {
        int i,t,c;
        scanf("%d",&t);
        while(t--)
        {
            for(i=1;i<=10;i++)
            {
                scanf("%d",&c);  //牌c 在位置i 处
                a[c]=i;
            }
            min1=100000;
            memset(vis,0,sizeof(vis));
            dfs(0,0);
            printf("%d\n",min1);
        }
        return 0;
    }

    分治

    动态规划

  • 相关阅读:
    2.13 day 10
    2.12 day9
    Mongo基础知识
    给mongodb设置密码
    前端框架
    SecureCRT的一些设置
    node 服务器框架
    python 知识博客
    数据库记录
    有用的网站
  • 原文地址:https://www.cnblogs.com/assult/p/3052178.html
Copyright © 2020-2023  润新知