zoukankan      html  css  js  c++  java
  • 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;
    }

    分治

    动态规划

  • 相关阅读:
    CDH 重装 kafka 报错,挺常见的错误
    SpringBoot + easyexcel + vue 下载 excel 问题
    第二节 全球金融市场
    第一节 金融市场概述
    第1章-起 步
    第3关-input()函数
    第2关-条件判断与条件嵌套
    风变编程-Python基础语法
    第0关-千寻的名字
    Git知识点记录3-Git基础
  • 原文地址:https://www.cnblogs.com/assult/p/3052178.html
Copyright © 2011-2022 走看看