C.Garland(DP)

22 篇文章 0 订阅

题目链接:C. Garland

在这里插入图片描述
题意
给你了一个序列,包含n个数,这个序列是由1~n数字构成,但是题目给你的这个序列并不完整,让你去补完整,那些输入的值为0的位置的就是让你去填数字,然后问你怎么填,这个序列的奇偶值最小。(一个序列的奇偶值大小就是这个序列的奇数和偶数的遇见次数,例如1,4,2,3,5奇偶值就是2,因为只有1,4和2,3两处奇数和偶数相遇)。
思路
开了一个四维的dp,dp[i][j][k][2];
第一维度表示当前的位数
第二维度表示当前已经填了多少个奇数
第三维度表示当前已经填了多少个偶数
第四维度表示当前填的这个数是奇数还是偶数。
dp维度表示好了状态转移方程就很清楚了,当奇数和偶数相遇时就加一。
AC代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=105;
int dp[N][N][N][2];
int pre[N];
int a[N];
int os,js;
int main()
{
    int n;
    scanf("%d",&n);
    os=n/2;
    js=n-os;
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        if(a[i]>0)
        {
            if(a[i]%2==0)
            {
                os--;
            }
            else
            {
                js--;
            }
            pre[i]=pre[i-1];
        }
        else
        {
            pre[i]=pre[i-1]+1;
        }
    }
    memset(dp,0x3f3f3f,sizeof(dp));
    dp[0][0][0][1]=0;
    dp[0][0][0][0]=0;
    for(int i=1; i<=n; i++)
    {
        for(int j=0; j<=js; j++)
        {
            for(int k=0; k<=os; k++)
            {
                if(a[i]<=0)
                {
                    if(j+k<=pre[i])
                    {
                        if(j==0&&k!=0)
                        {
                            dp[i][j][k][0]=min(dp[i-1][j][k-1][0],dp[i-1][j][k-1][1]+1);
                            dp[i][j][k][1]=min(dp[i-1][j][k][0]+1,dp[i-1][j][k][1]);
                        }
                        else if(k==0&&j!=0)
                        {
                            dp[i][j][k][0]=min(dp[i-1][j][k][0],dp[i-1][j][k][1]+1);
                        dp[i][j][k][1]=min(dp[i-1][j-1][k][0]+1,dp[i-1][j-1][k][1]);
                        }
                        else if(k==0&&j==0)
                        {
                            dp[i][j][k][0]=min(dp[i-1][j][k][0],dp[i-1][j][k][1]+1);
                        dp[i][j][k][1]=min(dp[i-1][j][k][0]+1,dp[i-1][j][k][1]);
                        }
                        else
                        {
                            dp[i][j][k][0]=min(dp[i-1][j][k-1][0],dp[i-1][j][k-1][1]+1);
                        dp[i][j][k][1]=min(dp[i-1][j-1][k][0]+1,dp[i-1][j-1][k][1]);
                        }
 
                    }
                }
                else
                {
                    if(j+k<=pre[i])
                    {
                        if(a[i]%2==0)
                        {
                            dp[i][j][k][0]=min(dp[i-1][j][k][0],dp[i-1][j][k][1]+1);
                        }
                        else
                        {
                            dp[i][j][k][1]=min(dp[i-1][j][k][0]+1,dp[i-1][j][k][1]);
                        }
                    }
 
                }
            }
        }
    }
    printf("%d\n",min(dp[n][js][os][0],dp[n][js][os][1]));
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,可以使用类似上面的爬虫代码获取 https://nba.hupu.com/stats/players 网站中的骑士队球员比赛数据,并使用分布雷达图进行可视化呈现。具体的代码实现可以参考以下示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd import numpy as np import matplotlib.pyplot as plt url = 'https://nba.hupu.com/stats/players' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 解析网页中的表格数据 table = soup.find('table', {'class': 'players_table'}) rows = table.find_all('tr') for row in rows[1:]: cols = row.find_all('td') team = cols[1].text if team == '骑士': # 只获取骑士队的比赛数据 player = cols[2].text games = int(cols[3].text) points = float(cols[4].text) rebounds = float(cols[5].text) assists = float(cols[6].text) steals = float(cols[7].text) blocks = float(cols[8].text) turnovers = float(cols[9].text) fouls = float(cols[10].text) # 处理和保存比赛数据 # ... # 将比赛数据存储到 Pandas DataFrame 中 data = pd.DataFrame({ 'Player': ['Collin Sexton', 'Darius Garland', 'Kevin Love', 'Larry Nance Jr.', 'Jarrett Allen'], 'Points': [24.5, 19.9, 14.2, 9.3, 13.2], 'Rebounds': [3.2, 3.1, 8.1, 7.2, 9.9], 'Assists': [2.9, 6.1, 2.5, 3.0, 1.4], 'Steals': [0.9, 0.7, 0.6, 1.3, 0.4], 'Blocks': [0.2, 0.3, 0.4, 0.7, 1.5] }) # 计算每个指标的平均值 mean = data.mean(axis=0) # 将每个指标的取值除以对应的平均值 normalized_data = data.iloc[:, 1:].div(mean[1:]) # 计算每个球员的指标平均值 player_mean = normalized_data.mean(axis=1) # 计算每个球员的指标方差 player_var = normalized_data.var(axis=1) # 计算每个指标的角度 angles = np.linspace(0, 2*np.pi, normalized_data.shape[1], endpoint=False) # 绘制分布雷达图 fig = plt.figure(figsize=(6, 6)) ax = fig.add_subplot(111, polar=True) colors = ['r', 'g', 'b', 'y', 'm'] for i, row in normalized_data.iterrows(): values = row.values.tolist() values += values[:1] ax.plot(angles, values, 'o-', linewidth=2, color=colors[i], label=data.iloc[i, 0]) ax.fill(angles, player_mean.values.tolist()+player_mean.values.tolist()[:1], alpha=0.25) ax.set_thetagrids(angles * 180/np.pi, normalized_data.columns) ax.set_title('Cavaliers Player Performance Comparison', fontsize=14) ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0)) plt.show() ``` 以上代码将生成一个分布雷达图,用于可视化骑士队球员的比赛数据,其中每个指标的取值都被标准化为对应的平均值,方便进行比较和分析。您可以根据实际的数据进行调整和修改,并添加其他的数据处理和可视化方法,以便更好地呈现数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值