2016.5.29(2)

10.鸣人的影分身

题目链接:http://noi.openjudge.cn/ch0206/8467/

本质就是放苹果,这类题用递归比较好想,就不用动规再费心了。

int fun(int m, int n)
{
    if (m == 0 || n == 1)
        return 1;
    if (m < n)
        return fun(m, m);
    else
        return fun(m - n, n) + fun(m, n - 1);
}
int main()
{
    int t;
    int m, n;
    cin >> t;
    while (t--)
    {
        cin >> m >> n;
        cout << fun(m, n) << endl;
    }
    return 0;
}

11.乘积最大

又是一道挺经典的动规题,属于保存前i个状态求i+1状态的类型

#include<cstdio>
#include<cstring>
using namespace std;
int a[110];
int f[110][101]; //f[i][j]表示前i个数字划分成j个的最大乘积
int d[110][110];//d[i][j]表示第i位到第j位的数字
char st[110];
int main()
{
    int n, m, k, i, j, x, y;
    scanf("%d%d", &n, &m);
    m++;
    scanf("%s", st + 1);
    for (i = 1; i <= n; i++)
        a[i] = st[i] - '0';
    for (i = 1; i <= n; i++)
    {
        d[i][i] = a[i];
        for (j = i + 1; j <= n; j++)
            d[i][j] = d[i][j - 1] * 10 + a[j];
    }
    for (i = 1; i <= n; i++)
        f[i][1] = d[1][i];
    for (k = 2; k <= m; k++)
    {
        for (i = k; i <= n; i++)
        {
            f[i][k] = 0;
            for (j = i; j >= k; j--)
                //状态转移方程
                if (f[i][k] < d[j][i] * f[j - 1][k - 1])
                {
                    f[i][k] = d[j][i] * f[j - 1][k - 1];
                }
        }
    }
    printf("%d\n", f[n][m]);
    return 0;
}


12.数的划分

题目链接:http://noi.openjudge.cn/ch0206/8787/

放苹果类题,只是不允许有空盘子,那就先给每个盘子里放个苹果即可,高中生必备知识....


13.切割回文

题目链接:http://noi.openjudge.cn/ch0206/8471/

还是经典动规题,知道前i个状态求i+1个状态

#include <iostream> 
#include <cstring> 
#include <cstdio> 
#include <algorithm>
using namespace std;
int t, f[1005], len;
char s[1005];
//判断从l到r是不是回文串
inline bool ok(int l, int r)
{
    int lo = r - l + 1;
    for (int i = l; i <= (l + r) / 2; ++i)
        if (s[i] != s[r - (i - l + 1) + 1])
            return false;
    return true;
}
int main()
{
    scanf("%d\n", &t);
    while (t--)
    {
        cin >> s;
        len = strlen(s);
        for (int i = len; i >= 1; --i)
            s[i] = s[i - 1];
        //给f初始化,让每个值都很大
        memset(f, 127 / 3, sizeof(f));
        for (int i = 1; i <= len; ++i)
            if (ok(1, i))
            {
                f[i] = 0;
                continue;
            }
            else
                //最精彩处,状态转移方程
                for (int j = 1; j < i; ++j)
                    if (ok(j + 1, i))
                        f[i] = min(f[j] + 1, f[i]);
        printf("%d\n", f[len]);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要读入数据到 R 中。可以使用以下代码: ``` data <- data.frame( year = c(2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019), tourists = c(2320, 2703, 3638.49, 3970.1, 4862.1, 5027.21, 5622.02, 6290.6, 7036.59, 7739.11), tourism_income = c(252.8, 303.1, 435.23, 501.2, 560.3, 600.71, 681.91, 785.29, 904.76, 904.76), foreign_income = c(4600, 5230, 5590, 3711, 4919, 5588, 6280, 7506, 8341, 8548), gdp_per_capita = c(48955, 58950, 65692, 72774, 82654, 89646, 99150, 112559, 120944, 128856), gdp = c(2207.99, 2630.30, 2933.2, 3252.01, 3697.89, 4016.84, 4449.38, 5064.92, 5466.17, 5850.08) ) ``` 然后,对每个变量进行描述性统计分析,可以使用 `summary()` 函数。 ``` summary(data) ``` 输出结果如下: ``` year tourists tourism_income foreign_income gdp_per_capita gdp Min. :2010 Min. :2320 Min. :252.8 Min. :3711 Min. : 48955 Min. :2208 1st Qu.:2012 1st Qu.:3723 1st Qu.:420.7 1st Qu.:5190 1st Qu.: 69763 1st Qu.:3144 Median :2015 Median :5244 Median :580.6 Median :6284 Median : 86150 Median :4357 Mean :2015 Mean :5070 Mean :583.4 Mean :6105 Mean : 87030 Mean :4269 3rd Qu.:2018 3rd Qu.:6496 3rd Qu.:843.5 3rd Qu.:7923 3rd Qu.:111750 3rd Qu.:5466 Max. :2019 Max. :7739 Max. :904.8 Max. :8548 Max. :128856 Max. :5850 ``` 结果中,每个变量的最小值、第一四分位数、中位数、平均值、第三四分位数和最大值都被统计出来了。 如果需要计算每个变量之间的相关系数,可以使用 `cor()` 函数。 ``` cor(data[, 2:6]) ``` 输出结果如下: ``` tourists tourism_income foreign_income gdp_per_capita gdp tourists 1.0000 0.9989 0.9893 0.9963 0.9961 tourism_income 0.9989 1.0000 0.9877 0.9982 0.9976 foreign_income 0.9893 0.9877 1.0000 0.9923 0.9922 gdp_per_capita 0.9963 0.9982 0.9923 1.0000 0.9999 gdp 0.9961 0.9976 0.9922 0.9999 1.0000 ``` 可以看到,每个变量之间都有很强的相关性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值