zoukankan      html  css  js  c++  java
  • 【CF-148E】Porcelain DP

    E. Porcelain

    题意

    有n个架子,每个架子从左到右摆放着瓷器,每个瓷器都有对应的价值。

    现在公主发飙了,发出了m声尖叫,每次尖叫意味着会有一个瓷器被摔了。

    瓷器每次只能拿某个架子上最左边或者最右边的一个,问损失的最大价值为多少?

    思路

    很容易想到(dp[i][j])表示前i个架子上,摔j个瓷器损失的最大价值。

    (dp[i][j]=max(dp[i-1][j-k]+val[i][k]))

    (val[i][k])表示第(i)个架子上,摔k个最大的损失。

    预处理,复杂度为(O(n^3))

    对于整个(dp)的转移来说:

    for i 1->n
    	for j 0-> min(sum[i],m)//sum[i]表示前i个架子上,瓷器数量和
    		for k 0-> num[i]   //num[i]表示第i个架子瓷器的数量
    

    虽然复杂度有点高,但是for循环最里层执行的语句复杂度低,可以AC。

    (我也是莽一发,没想到)

    代码

    #include<bits/stdc++.h>
    #define pb push_back
    typedef long long ll;
    using namespace std;
    const int inf = 0x3f3f3f3f;
    const int mod = 1e9+7;
    const int N = 1e4+10;
    
    int arr[110][110],dp[110][N];
    int pre[110][110],suf[110][110];
    int val[110][110],num[110];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            for(int j=1;j<=num[i];++j)
            {
                scanf("%d",&arr[i][j]);
                pre[i][j]=pre[i][j-1]+arr[i][j];
            }
            for(int j=num[i];j;--j) suf[i][j]=suf[i][j+1]+arr[i][j];
            for(int j=1;j<=num[i];++j)
            {
                for(int k=0;k<=j;k++)
                    val[i][j]=max(val[i][j],pre[i][k]+suf[i][num[i]-j+k+1]);
            }
        }
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            sum+=num[i];
            for(int j=sum;j>=0;j--)
            {
                for(int k=0;k<=min(j,num[i]);k++)
                {
                    dp[i][j]=max(dp[i][j],dp[i-1][j-k]+val[i][k]);
                }
            }
        }
        printf("%d
    ",dp[n][m]);
        return 0;
    }
    
  • 相关阅读:
    应用安全-Web安全-越权漏洞整理
    操作系统
    接码平台 | 临时邮箱生成网站
    shell反弹/端口转发/端口映射/内网穿透/代理/SSH中转/TLS加密传输/协议转换/DNS防污染/抓包工具整理
    远控CVE整理
    Windows系统CVE整理
    https的了解
    软件设计师备考
    https资料
    基本感觉比较好的书
  • 原文地址:https://www.cnblogs.com/valk3/p/12943890.html
Copyright © 2011-2022 走看看