首页 > 其他分享 >C. Minimizing the Sum

C. Minimizing the Sum

时间:2024-06-12 17:46:55浏览次数:12  
标签:覆盖 read Sum while Minimizing 数里 ll dp

原题链接

题解

1.任何一个数,只能覆盖一次
2.把被覆盖的数字具象化,那么最终数组一定是由若干个有颜色的区间(被覆盖)和无颜色区间(没有被覆盖)组成
3.这里就是状态的巧妙之处了,已知我们要求 \(n\) 个数里最多 \(k\) 个数被覆盖的最小和,那么这 \(k\) 个数里,一定存在末尾连续 \(j\) 个数字被覆盖 ,其中 \(0 \leq j \leq k\)
设 \(dp[i][k]\) 为前 \(i\) 个数里有 \(k\) 个数字被覆盖,则 \(dp[i][k]=\min(dp[i-j-1][k-j]+\min(a[i-j]...a[i])·j)\)

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

inline void read(ll &x) {
	x = 0;
	ll flag = 1;
	char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
	while(c >= '0' && c <= '9') {
		x = (x << 3) + (x << 1) + (c ^ 48);
		c = getchar();
	}
	x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
    	putchar('-');
		x = -x;
	}
    if(x > 9)
		write(x / 10);
    putchar(x % 10 + '0');
}

ll a[300005];
ll dp[300005][15]={0};

int main()
{
    ll t;
    read(t);
    while(t--)
    {
        ll n, k;
        read(n);
        read(k);

        ll sum=0;
        for(ll i=1; i<=n; i++)
        {
            read(a[i]);
            sum += a[i];
            for(ll j=0; j<=k; j++) dp[i][j] = sum;
        }

        for(ll i=1; i<=n; i++)
        {
            for(ll j=1; j<=min(i-1, k); j++)
            {
                ll mn = a[i];
                for(ll l=0; l<=j; l++)
                {
                    mn = min(a[i-l], mn);
                    dp[i][j] = min(dp[i][j], dp[i-l-1][j-l] + (l+1) * mn);
                }
            }
        }

        ll ans = 2e18;
        for(ll i=0; i<=k; i++) ans = min(ans, dp[n][i]);
        write(ans);
        putchar('\n');
    }
    return 0;
}

标签:覆盖,read,Sum,while,Minimizing,数里,ll,dp
From: https://www.cnblogs.com/pure4knowledge/p/18244394

相关文章

  • Summary:《Adversarial Machine Learning in Image Classification: A Survey Towards
    Note“TaxonomyofAdversarialImages”(Machado等,2023,p.5)(pdf)扰动范围(PerturbationScope):个体扰动(Individual-scopedperturbations):为每个输入图像单独生成的扰动。通用扰动(Universal-scopedperturbations):独立于任何输入样本生成的扰动,可应用于任何合......
  • ICS3U – Summative A
    ICS3U–SummativeAssignmentMETHODSANDARRAYSSearchingforSugar:SugartheSlothislostintheJungle(oryoucouldthinkofitasagridwithrowsandcolumns)andyouwillneedhelphimescape–whileavoidingtheroamingpredatorsthatareafter......
  • LeetCode 974 Subarray Sums Divisible by K All In One
    LeetCode974SubarraySumsDivisiblebyKAllInOneLeetCode974能被K整除的子数组之和errosfunctionsubarraysDivByK(nums:number[],k:number):number{//-5/0/5letcount:number=0;//单个元素for(leti=0;i<nums.length;i++){......
  • summer-data介绍
    官网地址:https://www.summer-data.com代码库地址:https://gitee.com/hahan2020/summer-datasummer-data是什么?summer-data设计用于替代mybatis和hibernate。从个人角度挑一些它们和springjdbc-template的缺点,这些缺点是我创作summer-data的原因。mybatis需......
  • 在计算机论文中suppose suggest assume 用法上的区别
    ChatGPT3.5的答案:在计算机论文中,"suppose,""suggest,"和"assume"有不同的用法和含义。它们在表达假设、建议和假定时具有不同的语气和语境。以下是它们的区别和示例:Suppose定义:假设某种情况或前提,通常用于讨论或推理。用法:假设情景:"Supposeweuseamoreefficie......
  • 载谭 Binomial Sum 学习笔记
    原文链接:载谭BinomialSum:多项式复合、插值与泰勒展开。下面就从例题开始慢慢说这个算法。P5430[SNOI2017]礼物加强版题目描述给定\(n,k\),求\[n^k+\sum_{i=1}^{n-1}2^{n-1-i}i^k\]答案对\(10^9+7\)取模。\(1\len\le10^{100000},1\lek\le2\times10^7\)。......
  • CF1651E Sum of Matchings
    标签:图论鱼鱼蒸题。原图由若干个偶环组成,那么对于每个环分别计算贡献,枚举环上的一段区间,然后算出要能包含这一段的\(l,r,L,R\)的对应的最小区间,然后又不能包含这段区间左右的点,所以要去掉一部分,然后乘起来再乘上区间长度的一半即可。优美的代码实现。#include<bits/stdc++.......
  • C. Given Length and Sum of Digits...
    原题链接一句话题意分别找出长度为n,每位数字和恰好为m的最小数和最大数,如果找不到输出”-1-1“思维怎么确保构造的数最小/大?怎么确保数字和恰好为m?实施遍历每一位,贪心地选取最大/最小的数,直到接下来的数字不足以贪心细节1.没有前导零2.数字和恰好为m3.注意边界特判co......
  • LeetCode 1748. Sum of Unique Elements
    原题链接在这里:https://leetcode.com/problems/sum-of-unique-elements/description/题目:Youaregivenanintegerarray nums.Theuniqueelementsofanarrayaretheelementsthatappear exactlyonce inthearray.Return the sum ofalltheuniqueelementso......
  • [ABC238E] Range Sums
    原题链接题解把这里的数字看成间隔,不要看成点假设已知能和\(l\)组成区间的端点集合\(A\)和以\(r\)组成区间的端点集合\(B\),这时候加入一个以\(l,r\)为左右端点的区间,那么在加入区间\(l,r\)之后,这两个集合可以合并code#include<bits/stdc++.h>usingnamespacestd......