首页 > 其他分享 >Minimizing the Sum

Minimizing the Sum

时间:2024-05-15 14:20:43浏览次数:22  
标签:min int mina Sum long Minimizing include dp

题目链接
https://codeforces.com/problemset/problem/1969/C
分析分析样例就可以知道这不是一道贪心题,所以我们可以采用dp
寻常的dp一般都是从左向右,但是这样就会导致变成的值可能在左边,比如
3 2
2 2 1
所以我们换一种dp方式,注意到k的范围很小,长度为n的序列在n-1次操作就可以变成n倍最小值
所以在我们在枚举n和k的时候枚举操作了多少次
时间复杂度O(nkk)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<unordered_map>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<cmath>
#include<set>
using namespace std;
#define int long long
typedef long long ll;
const int N=1e6+10;
const int mod=1e9+7;
int a[N];
int dp[N][20];

void solve()
{
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<=n+1;i++)
    {
        for(int j=0;j<=k+1;j++)
        {
            dp[i][j]=1e18;
        }
    }
    dp[0][0]=0;
    a[0]=1e18;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=k;j++)
        {
            int mina=a[i];
            for(int p=1;p<=k;p++)
            {
               
                if(j>=p&&i-1>=1&&i-p-1>=0)
                { mina=min(mina,a[i-p]);
                    dp[i][j]=min(dp[i][j],dp[i-p-1][j-p]+mina*(p+1));
                }
            }
            dp[i][j]=min(dp[i][j],dp[i-1][j]+a[i]);
        }

    }
    int ans=1e18;
    for(int i=0;i<=k;i++)
    {
        ans=min(ans,dp[n][i]);
    }
    cout<<ans<<endl;
    return ;
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
}

标签:min,int,mina,Sum,long,Minimizing,include,dp
From: https://www.cnblogs.com/yuhaomice/p/18193788

相关文章

  • CF1965D Missing Subarray Sum题解
    题目链接点击打开链接题目解法感觉一点都不好想\fn因为最后的序列\(a\)是回文的,所以只有以中心点对称的子段和出现次数为奇数,其他都为偶数考虑有没有什么知道所有子段和的做法,可以方便推出缺失一个的答案令\(g_{l,r}\)为\(l\)到\(r\)的子段和知道\(g_{1,n}\)删......
  • 64 - Minimum Path Sum 最小路径和
    64-MinimumPathSum最小路径和问题描述Givenamxngridfilledwithnon-negativenumbers,findapathfromtoplefttobottomright,whichminimizesthesumofallnumbersalongitspath.Note:Youcanonlymoveeitherdownorrightatanypointinti......
  • AtCoder Beginner Contest 351 E - Jump Distance Sum
    题目链接Hint1:只能斜着走,容易想到黑白棋盘,\((x+y)\%2==0\)位于一个团,\((x+y)\%2==1\)位于另一个团,分别求和。Hint2:\(dist=max(|x1-x2|,|y1-y2|)\),这是切比雪夫距离,将坐标系倾斜\(45^{\circ}\),改为曼哈顿距离\(dist=|x1-x2|+|y1-y2|\),即\(X=x+y,Y=x-y\),这样就可以将横纵坐标......
  • Rocketmq 不同的topic要配不同的consumegroup
    Rocketmq不同的topic要配不同的consumegroup使用Rocketmq一定要注意,如果项目中要订阅两个topic,一定要保证consumeGroup是两个不同的。这是因为,Consumer会定期发送心跳,默认是30s一次。心跳会像全部broker发送,心跳包内容包括groupname,topicname1。然后broker端会......
  • LeetCode 1186. Maximum Subarray Sum with One Deletion
    原题链接在这里:https://leetcode.com/problems/maximum-subarray-sum-with-one-deletion/description/题目:Givenanarrayofintegers,returnthemaximumsumfora non-empty subarray(contiguouselements)withatmostoneelementdeletion. Inotherwords,youwa......
  • Summer '24来啦!15个最热门的功能抢先看!
    SalesforceSummer'24即将发布!本篇文章我们将深入了解Summer'24最热门的声明性功能。01自动化Lightning应用程序新的自动化Lightning应用程序中包含所有与自动化相关的内容。访问该应用程序的用户可以在主应用程序中看到Flow、错误信息和其他基于社区的链接。02Einsteinf......
  • LeetCode 1373. Maximum Sum BST in Binary Tree
    原题链接在这里:https://leetcode.com/problems/maximum-sum-bst-in-binary-tree/description/题目:Givena binarytree root,return themaximumsumofallkeysof any sub-treewhichisalsoaBinarySearchTree(BST).AssumeaBSTisdefinedasfollows:Thel......
  • 题解【[ABC147F] Sum Difference】
    题目链接下为口胡题解:入手方向推导:直接考虑题目所给式子显然困难:\[w(S)=\sum_{i\inS}A_i-\sum_{i\notinS}A_i\]因为两个式子虽然相关但是都在变化,不妨转化为:\[w(S)=2\times\sum_{i\inS}A_i-\sum_{i=1}^nA_i\]这样只用求出有多少个不同的\(\sum_{i\inS}A_i\)。由于......
  • excel - SUMIF的使用
    SUMIF(range,criteria,[sum_range])range是你要根据条件进行检查的单元格区域。criteria是根据其检查range的条件。这个条件可以是数字、表达式、或文本字符串。[sum_range]是可选的参数,当要求和的数字位于与range不同的区域时使用。如果省略sum_range,Excel会默认......
  • 题解:AT_abc298_h [ABC298Ex] Sum of Min of Length
    分析模拟赛签到题。考虑分讨。分两种情况:\(L=R\)。\(L\neR\)。对于第\(1\)种情况,用换根DP求一个\(i\)为根时所有点的深度和就行。对于第\(2\)种情况,钦定$dep_R\gedep_L$。很显然,\(R\)为根的子树中所有点都是离\(R\)更近。假设在\(L\)到\(R\)的路径......