zoukankan      html  css  js  c++  java
  • LightOJ 1422 Halloween Costumes

    https://vjudge.net/problem/LightOJ-1422

    题意:

    给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会。

    思路:

    很明显的区间DP问题。既然是区间DP,那么我们就要选定范围来进行分析。d[i][j]表示的是i~j之间所要穿的衣服的最少衣服数。

    状态转移方程就是d[i][j] = min(d[i][j], d[i][k - 1] + d[k+1][j])。k代表的是在i~j这个区间内第k天要穿的衣服和第i天的衣服是一样。d[i][k - 1] + d[k+1][j]的意思就是第i天这件衣服穿了之后就不再脱下来。

     1 #include<iostream> 
     2 #include<string>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int n;
     8 int a[105];
     9 int d[105][105];
    10 
    11 int main()
    12 {
    13     //freopen("D:\txt.txt", "r", stdin);
    14     int kase = 0;
    15     int T;
    16     cin >> T;
    17     while (T--)
    18     {
    19         cin >> n;
    20         for (int i = 1; i <= n; i++)
    21             cin >> a[i];
    22         for (int i = 1; i <= n; i++)
    23         {
    24             for (int j = i; j <= n; j++)
    25             {
    26                 d[i][j] = j - i + 1;
    27             }
    28         }
    29         for (int i = n; i >= 1;i--)
    30         for (int j = i + 1; j <= n; j++)
    31         {
    32             d[i][j] = d[i + 1][j] + 1;
    33             for (int k = i + 1; k <= j; k++)
    34             {
    35                 if (a[i] == a[k])
    36                     d[i][j] = min(d[i][j], d[i][k - 1] + d[k+1][j]);
    37             }
    38         }
    39         cout << "Case " << ++kase << ": " << d[1][n] << endl;
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    eNSP进行配置网络模拟网络联通
    Labview上使用mydaq采集数据
    Labview实现计算器
    matlab小记(四)
    matlab小记(三)
    matlab小记(二)
    matlab小记(一)
    Python中map和reduce
    Python 如何调用自定义函数
    《机电传动控制》第十一周作业(二)
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6382394.html
Copyright © 2011-2022 走看看