[DP] Codeforces #626F. Group Projects

news/2025/1/19 13:40:54/

显然是 DP 。这种贡献和最值有关的,一般用按顺序插入的方法 DP ,会简单很多。有挺多类似的题的。
这题就是 fi,j,k 表示插入了前 i 个,有 j 个块开发待插入,总代价为 k
每次插入 i+1 就考虑是新开一个块还是插入原有块中,是否要闭合块。转移 O(1)
有个问题就是一个块的贡献是延迟计算的,即闭合后才会确定贡献。 k 应该记什么呢?
比较直接的想法就是新开块时ai,闭合时 +ai ,但是发现这样会导致 k 取值范围大,状态数就炸了。
所以我们应该假设当前的 ai 是每个块的最大值, i 增大时加上 (ai+1ai)j 就好了。
总体来说比较套路吧。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=205,maxk=1005,MOD=1e9+7;
typedef long long LL;
int n,K,a[maxn];
LL f[2][maxn][maxk],ans; 
int main(){freopen("cf626F.in","r",stdin);freopen("cf626F.out","w",stdout);scanf("%d%d",&n,&K);for(int i=1;i<=n;i++) scanf("%d",&a[i]);sort(a+1,a+1+n);f[0][0][0]=1; a[0]=a[1]; for(int i=0;i<=n-1;i++){memset(f[(i&1)^1],0,sizeof(f[(i&1)^1]));  for(int j=0;j<=i;j++)for(int k=0;k<=K;k++) if(f[i&1][j][k]&&k+j*(a[i+1]-a[i])<=K){(f[(i&1)^1][j+1][k+j*(a[i+1]-a[i])]+=f[i&1][j][k])%=MOD; //新  (f[(i&1)^1][j][k+j*(a[i+1]-a[i])]+=f[i&1][j][k])%=MOD; //新 闭 if(j) (f[(i&1)^1][j][k+j*(a[i+1]-a[i])]+=f[i&1][j][k]*j%MOD)%=MOD; // 插入  if(j) (f[(i&1)^1][j-1][k+j*(a[i+1]-a[i])]+=f[i&1][j][k]*j%MOD)%=MOD; // 插入 闭 }      }for(int i=0;i<=K;i++) ans=(ans+f[n&1][0][i])%MOD;printf("%lld\n",ans);return 0;
}

http://www.ppmy.cn/news/937217.html

相关文章

CodeForces-626C-Block Towers

传送门&#xff1a;http://codeforces.com/problemset/problem/626/C 题意&#xff1a;给你两个1e6的数n&#xff0c;m。n代表有多少个可以用两块砖的学生&#xff0c;m代表有多少个可以用三块砖的学生。每个学生的砖都不能相同&#xff0c;问你最大的高度的最小值。 思路&am…

android和MTKP60哪个好,骁龙626和联发科P60哪个好 联发科P60与骁龙626区别对比

我们知道手机处理器芯片厂商&#xff0c;无非就那么几家。其中除了高通占据第一大市场之外&#xff0c;其他均被华为、三星、联发科和苹果占据。说到联发科芯片&#xff0c;我们不得不提今年新上市的联发科P60处理器&#xff0c;这颗芯片有着极为出色的性能&#xff0c;已经定位…

cf-626c

http://codeforces.com/problemset/problem/626/C 想着暴力过。。。结果可想而知 #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<…

leetcode-SQL-626. 换座位

leetcode-SQL-626. 换座位 题目解题 题目 题目链接 表: Seat ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ---------------------- Id是该表的主键列。 该表的每一行都表示学生的姓名和I…

NYOJ626 intersection set

原题链接 用C结果TLE了三次&#xff0c;换成C就过了..时间&#xff1a;744&#xff0c;内存&#xff1a;424 #include <cstdio> #include <algorithm> #define MAX 50000 2 int a[MAX]; using namespace std;int main(){int m, n, i, t, sum;while(scanf("%…

CF626C Block Towers 题解

提供一个简单的做法。 upd&#xff1a;将 k k k 改成了 p p p&#xff0c;本人眼瞎 题目传送门 首先&#xff0c;我们设答案为 p p p&#xff0c;则 p p p 至少要等于 max ⁡ ( 2 n , 3 m ) \max(2\times n,3\times m) max(2n,3m) &#xff0c;这个应该很好想&#x…

SS626V100 SDK安装编译osdrv问题汇总

文章目录 前言1、开发环境2、在 linux 服务器上安装交叉工具链2.1 安装 aarch64-mix410-linux.tgz2.2 安装 cc-riscv32-cfg11-musl-20211008-elf.tar.gz2.3 检查工具链版本&#xff0c;打印版本则表示配置成功 3、安装 SDK3.1 SS626V100 SDK 包位置3.2 解压缩并展开 SDK 包 4、…

【LeetCode-SQL】626. 换座位

目录 一、题目二、解决1、if / case when2、row_number()3、left join4、异或 三、参考 一、题目 表: Seat ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ---------------------- Id是该表…