zoukankan      html  css  js  c++  java
  • URAL 1152 False Mirrors(记忆化?搜索)

    博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/38661297

    False Mirrors

    题目大意:竟然还有个背景故事。。。。 其实问题简化一下就是有n个阳台,首尾相接形成一个环,阳台里有怪物,伤害为a[i],你每次可以打掉连续的三个阳台,那么同时,没被打掉的那些怪物会对你造成响应a[i]的伤害。经过几次战斗,你打掉所有阳台的怪物,问受到的伤害最小是多少。

    解题思路:本来以为是个记忆化搜索,就让啸哥叫我记忆化搜索,完事发现搜着搜着就搜过去了,具体我也不知道中间用没用记忆化,就只是存了一个较小值,有点记忆化的意思吧。

     1 #include <stdio.h>
     2 
     3 int ans;
     4 int n;
     5 int a[25];
     6 
     7 void DFS(int sum, int Min){
     8     for(int i = 0; i < n; ++i){
     9         int l = i==0?n-1:i-1;
    10         int r = i==n-1?0:i+1;
    11         int sub = a[i]+a[l]+a[r];
    12         if(sub > 0){
    13             if(sum-sub == 0){
    14                 if(Min < ans){
    15                     ans = Min;
    16                 }
    17                 continue;
    18             }
    19             if(Min+(sum-sub) < ans){
    20                 int a1 = a[l], a2 = a[i], a3 = a[r];
    21                 a[l] = a[i] = a[r] = 0;
    22                 DFS(sum-sub, Min+(sum-sub));
    23                 a[l] = a1, a[i] = a2, a[r] = a3;
    24             }
    25         }
    26     }
    27 }
    28 
    29 int main()
    30 {
    31     scanf("%d", &n);
    32     int sum = 0;
    33     for(int i = 0; i < n; ++i){
    34         scanf("%d", &a[i]);
    35         sum += a[i];
    36     }
    37 
    38     ans = 1<<29;
    39     DFS(sum, 0);
    40     printf("%d
    ", ans);
    41 
    42     return 0;
    43 }
    URAL 1152
  • 相关阅读:
    YAML语法
    Python tab补全
    Ubuntu开启root用户登录
    Windows部署JDK和Tomcat
    驾校宝典之科目一整理
    VMware之Red Hat安装配置部署
    H3C之VRRP实验部署
    Windows Server实验指导
    基础网络配置与管理综合实验报告
    H3C-VLan配置
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3919648.html
Copyright © 2011-2022 走看看