首页 > 其他分享 >F. Color Rows and Columns

F. Color Rows and Columns

时间:2024-08-16 23:17:02浏览次数:11  
标签:rect Rows cost Color int score Columns -- dp

原题链接

题解

本质:贪心+dp

首先当我们面对一个矩形时,肯定是不停的枚举其最小边使得score上涨。

为什么面对多个矩形不行呢?我们可以注意观察到最后一组样例的答案是 35 而非36。

那么此时我们知晓了每个矩形 得到score 分的操作数 设为cost [ n ][ score ]。

接下来问题就简化为了在n个矩形中选出最优的 k 分。

很明显我们考虑dp。

dp [ i ] [ score ] 的含义为从 i ... n 的矩形中得到 score 分所需的操作数。

Ps:dp表可以从二维优化到一维。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int cost[N][205];
int dp[105];
struct node{
    int a,b;    
};
node rect[N];

int n,k;

void Init(){
    for (int i=1;i<=n;i++){
        int a=rect[i].a,b=rect[i].b;
        cost[i][a+b]=a*b,cost[i][a+b-1]=a*b;
        
        int score=0,cos=0;
        while (a>1 || b>1){
            if (a>b) swap(a,b);
            cos+=a;
            score++;
            b-=1;
            cost[i][score]=cos;
            
//            cout<<a<<" "<<b<<endl;
        }
    }
}

void solve(){
    
    cin>>n>>k;
    for (int i=1;i<=n;i++){
        cin>>rect[i].a>>rect[i].b;
    }
    Init();
    
    
    for (int i=0;i<=k;i++) dp[i]=100000;
    
    int a=rect[n].a,b=rect[n].b;
    for (int z=min(k,a+b);z>=0;z--)
        dp[z]=cost[n][z];
    
    for (int i=n-1;i>=1;i--){
        a=rect[i].a,b=rect[i].b;
//        cout<<i<<" "<<a<<" "<<b<<endl;
        for (int j=k;j>=0;j--){
            for (int z=a+b;z>=0;z--){
                dp[j]=min(dp[j],dp[max(0,j-z)]+cost[i][z]);
            }
        }
    }
    
    cout<<(dp[k]==100000 ? -1 : dp[k])<<endl;
}

int main(){
    int t;
    cin>>t;
    while (t--){
        solve();
    }
    return 0;
}

 

标签:rect,Rows,cost,Color,int,score,Columns,--,dp
From: https://www.cnblogs.com/purple123/p/18363820

相关文章

  • CF1503E 2-Coloring
    CF1503E2-Coloring题目大意略过。做法解析不会组合,使用了DP,但其实本质相同。我们假设所有的格子都是蓝色的,然后考虑将一些格子换成黄色的。我们考虑从每一行的两头开始将格子换成黄色,只要不把整一行都换成黄色的我们就可以保证每一行恰好有一段蓝色的格子。为了保证每一......
  • AT_agc025_b RGB Coloring 题解
    ProblemSolution由于涂绿色的得分为\(A+B\),所以可以将红色与蓝色独立考虑。依次枚举红色的个数,假定为\(i\),所以剩余需要的得分为\(K-i\timesA\),判断是否能被\(B\)整除,若能,则蓝色个数为\(\frac{K-i\timesA}{B}\),设为\(j\),则总方案累加\(C^{i}_{n}\timesC^{j}_{n}\),除......
  • Vue 项目中,设置的 `color` 样式为 Hex 代码,但最终显示为 RGB 代码 情况原因
    在Vue项目中,设置的color样式为Hex代码,但最终显示为RGB代码,这通常是由于以下几种情况导致:1.CSS预处理器(Sass,Less)的影响:当你使用Sass或Less等CSS预处理器时,它们会将Hex颜色代码转换为RGB颜色代码,以便更好地进行颜色计算和操作。如果你在style属性......
  • [CodeForces] F. Color Rows and Columns
    ProblemLink Basedoninitialobservation,itseemsthatgreedilypickthesmallestrow/columnlengthworks.Butthelastexampletestcaseoutputs35whilegreedygives36.  Howyoushouldgofromthere:1.checkifyourgreedyimplementationisco......
  • ProTable rowSelection 支持多选
    前言:第一次用到多选,gpt非常好用,比之前网页方便太多。 importProTablefrom'@ant-design/pro-table';importReact,{useState}from'react';constTableWithRowSelection=()=>{//使用useState钩子来保存选中的行const[selectedRows,setSelectedRows]......
  • Interactive Game with Coloring
    看这篇题解解释一下,如果存在一个点通向父亲的边和某一条通向儿子的边的颜色相同,那么一开始如果起点就在这个点的话,是没有办法向上走的,所以任意一个点通向父亲的边和某一条通向儿子的边的颜色不同对于非特殊点,我们只要一直走没有重复出现的那个颜色就好了如果某一时刻走到了特殊......
  • color:让终端输出更多彩
    首先,需要将库添加到Go项目中。使用以下命令安装 github.com/fatih/color:go get -u github.com/fatih/color这个命令会将库下载到Go模块中,并且可以在项目中使用。2.快速开始安装完成后,我们就可以开始在代码中使用 color 包。我们从一个简单的例子开始,展示如何输出带颜色......
  • D. Coloring Brackets
    原题链接题解首先,假设当前\(s(l,r)\)括号序列为合法序列,则有如下几种情况:\(l+1==r\)()\(match[r]==l\)(...)\(match[r]!=l\)(...)...(...)code#include<bits/stdc++.h>usingnamespacestd;constlonglongMOD=1e9+7;longlongdp[705][705][3][3]......
  • AtCoder Regular Contest 100 F Colorful Sequences
    洛谷传送门AtCoder传送门比较有趣的一个题。考虑一个弱化版,算colorful序列个数。有一个\(O(nK)\)的dp,大概就是设\(f_{i,j}\)为考虑到第\(i\)个数,当前最长互不相同后缀长度为\(j\)。转移考虑若往后面填一个在这\(j\)个数以外的数就能使\(j\getsj+1\),因此\(......
  • CF1209E2 Rotate Columns (hard version) 题解
    CF1209E2给定\(n\timesm\)的矩阵,可以对每一列进行若干次循环移位,求操作完成后每一行的最大值之和的最大值。\(1\leqn\leq12,1\leqm\leq2000\)这里\(m\)很大,但有一个很重要的性质这\(m\)列中只有最大的前\(n\)个会对答案产生贡献因此我们直接就把......