AGC002 F Leftmost Ball——DP】的更多相关文章

题目:https://atcoder.jp/contests/agc002/tasks/agc002_f 充要条件是前缀0的个数 >= 颜色种数. 设计 DP ,放一个颜色的时候就把所有该颜色的点都考虑完,不要一个一个放.这样就不用考虑 “剩下多少个旧颜色的点可用” 了. 新放一种颜色的时候,知道现在已经填了多少个位置,所以所有该颜色点的放置方案数是可算的. dp[ i ][ j ] 表示放了 i 个 0 .j 种颜色的方案.认为颜色是按顺序放的,最后乘上阶乘.就有 \( dp[i][j] ->…
貌似哪里讲过这题..总之当时掉线了(理解能力又差水平又低选手的日常).. 看看题目,应该是DP. 尝试了几次换状态,毫无思路.那我们就来继续挖掘性质吧...为了更直观,我们令第i个出现的球颜色就是i(最后乘个阶乘就成).那么有: 1122->0102 13223312->00203312 122132441231344->002102041231344 我们发现,i个0将序列分成i段,第i段的数字由1...i组成.考虑从1到n依次塞数字,数字i要塞在第i个0后面,因此会有这样的现象.我们…
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ 个球,其中,颜色为 $1,2,\cdots, n$ 的球各有 $k$ 个. 将这些球任意排列成一排,对于每一种颜色,将这种颜色的球的最左边的那个涂成颜色 $0$ . 问最终可以得到多少种不同的排列. $1\leq n,k\leq 2000,{\rm Mod} = 10^9 +7$ 题解 首先当 $…
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数DP [题解]只看黑体字部分即可. 自己考虑了几种计数方案,都不能实现.一种从左到右,但要记录每种球剩余多少,不可行.一种从右到左枚举白球包含区间填充,但因为只看白球,每种颜色没有关键球,会有重复统计的问题. 计数的关键在于白球的原色不重要以及每种颜色关注最左端的球(这里不含变成白球的球). 本题既然nk…
Atcoder 题面传送门 & 洛谷题面传送门 这道 Cu 的 AGC F 竟然被我自己想出来了!!!((( 首先考虑什么样的序列会被统计入答案.稍微手玩几组数据即可发现,一个颜色序列 \(c_1,c_2,\cdots,c_{nk}\) 满足条件当前仅当对于从左往右数第 \(i\) 个 \(0\) 号颜色的位置 \(p_i\),\([1,p_i-1]\) 中非零颜色的种类 \(<i\).简单证明一下,必要性:如果 \(\exist i\in[1,n]\) 满足 \([1,p_i-1]\) 中…
题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_f 题解: 讲一下官方题解的做法: 就是求那个图(官方题解里的)的拓扑序个数,设\(dp[i][j]\)表示有\(i\)个0色和\(j\)个非0色的图的拓扑序个数(\(i<j\)),则转移一是加入一个0色球,二是加入一个非0色球(拓扑序以非0色球开始),这种情况下我们固定了开头所以还剩\(((K-1)j+i-1)\)个位置放入\((K-2)\)个球,\(dp[i][j]=dp[i-1][j…
题目大意 有\(n\)种颜色的球,每种\(m\)个.现在zjt把这\(nm\)个球排成一排,然后把每种颜色的最左边的球染成第\(n+1\)种颜色.求最终的颜色序列有多少种,对\(1000000007\)取模. \(n,m\leq 2000\) 题解 我们称颜色为\(1\sim n\)的球为正常颜色的球,颜色为\(n+1\)的球为白球. 我们先钦定每种颜色最左边那个球的出现顺序为\(1\)~\(n\),从左往右的第\(i\)个白球的球对应着第\(i\)个颜色. 考虑从后往前放,设当前序列最前面有\…
Problem Statement Snuke loves colorful balls. He has a total of N×K balls, K in each of his favorite N colors. The colors are numbered 1 through N. He will arrange all of the balls in a row from left to right, in arbitrary order. Then, for each of th…
Description Snuke loves colorful balls. He has a total of N*K balls, K in each of his favorite N colors. The colors are numbered 1 through N.He will arrange all of the balls in a row from left to right, in arbitrary order. Then, for each of the N col…
[agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色,所以无论何时,\(0\)号颜色的数量不能少于其他颜色的数量. 可以设状态\(f[i][j]\)表示前面一共放了\(i\)个\(0\)号颜色的球,而一共出现了\(j\)种其他颜色的球,根据上面的东西,可以知道\(i\ge j\).每次转移我们分成两种考虑.第一种就直接在后面接一个\(0\)号颜色的球…
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同时消去,问最少需要消去多少次 题解 定义dp[l][r]为区间[l,r]剩下一个字符所需要的最小次数 dp[l][r]=min(dp[l][i]+dp[i+1][r]+x) x为消去剩下两个字符所需要的次数,假如两个字符相同需要x=-1 代码 #include<bits/stdc++.h> #de…
/** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: dp[i]表示前i个字符需要的最小次数. dp[i] = min(dp[j]+w(j+1,i)); (0<=j<i); [j+1,i]如果存在循环节(自身不算),那么取最小的循环节x.w = digit((i-j)/x)+x; 否则w = i-j+1; 求一个区间最小循环节: 证明:http://w…
传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch))ans=(ans<…
题目传送门:https://agc002.contest.atcoder.jp/tasks/agc002_f 题目翻译 你有\(n*k\)个球,这些球一共有\(n\)种颜色,每种颜色有\(k\)个,然后你可以随意把它们放成一行.放好后把每个颜色最左边的球染成\(n+1\)号颜色,问这样可以搞出多少种不同的颜色序列. 题解 最近没休息好,状态不好,而且这还是我最不擅长的计数题,跪了跪了. 你们去看别人的题解吧,我也讲不清楚,这里只有丑逼代码可以看. 时间复杂度:\(O(nk)\) 空间复杂度:\(…
传送门 解题思路 设\(f[i][j]\)表示填了\(i\)个白色,\(j\)种彩色的方案数,那么显然\(j<=i\).考虑这个的转移,首先可以填一个白色,就是\(f[i][j]=f[i-1][j]*(n-i+1)\).第二种情况是填一个彩色,这里有一点需要注意,不能直接用组合数,这样的话会有重复,我们可以强行安排一个顺序,这种颜色的第一个被变成了白色,第二个就直接跟在上一种彩色的后面,这样就可以做到不重不漏了,那么第二个转移就是\(f[i][j]=f[i][j-1]*C(n*k-(i+(j-1…
思路: 每次枚举数字和也就是取模的f(x),这样方便计算. 其他就是基本的数位Dp了. 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include<iomanip> #include<cmath> #include<cstring> #include<vector> #define ll __int64 #define pi acos(-1…
Problem Description Here is a function f(x): int f ( int x ) { if ( x == 0 ) return 0; return f ( x / 10 ) + x % 10; } Now, you want to know, in a given interval [A, B] (1 <= A <= B <= 10 9), how many integer x that mod f(x) equal to 0.   Input T…
Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 Description Bill is trying to compactly represent sequences of capital alphabetic characters from 'A' to 'Z' by folding repeating subsequences insid…
题意 给定一棵以 \(1\) 号点为根的树.若满足以下条件,则认为节点 \(p\) 处有一个 \(k\) 叉高度为 \(m\) 的堆: 若 \(m = 1\) ,则 \(p\) 本身就是一个 \(k\) 叉高度为 \(1\) 的堆. 若 \(m > 1\) ,则 \(p\) 需要有至少 \(k\) 个儿子满足在儿子处有一个 \(k\) 叉高度为 \(m − 1\) 的堆. 令 \(dp[p][k]\) 表示在 \(p\) 点 \(k\) 叉堆的最大高度,令 \(g[p][k]\) 为 \(p\)…
Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1. Now you are given two numbers A and B, please calculate how many numbers are there between…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n…
F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想法是先排好序, dp[ i ][ j ][ k ]表示已经划分了 i 个, 并且分成了 j 组, 目前为止的总消耗为k的方案总数. 但是这个状态没有办法转移, 题解提供了一种将贡献分段的方法, 比如说原数组为1 2 3 6 7 8 10, 其中一组里面有 1 3 7 8 那么我们不是 直接计算出(8…
题目链接 AtCoder:https://agc002.contest.atcoder.jp/tasks/agc002_f 洛谷:https://www.luogu.org/problemnew/show/AT2000 Solution 对于一个任意的颜色序列,它合法当且仅当任意一个前缀序列都要满足白色数量大于等于颜色种类数(不包括白色). 设\(f[i][j]\)表示当前填了\(i\)个白球,\(j\)种其他颜色的球的方案数,显然当\(i<j\)时\(f[i][j]=0\). 考虑转移,我们考…
题意 一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少数使得F(x) <= F(A).多组数据,T <= 10000 思路 成都网赛--都是泪T_T-- 很裸的数位DP--一开始我的dp状态是dp[pos][fx],fx表示当前枚举到fx为多少,判断fx<=fa.但这样设计状态的一个问题是对于不同的A,dp[][]表示的状态不同,所以每个T都有…
题目描述 对于一个非负整数 $x=​​\overline{a_na_{n-1}...a_2a_1}$ ,设 $F(x)=a_n·2^{n-1}+a_{n-1}·2^{n-2}+...+a_2·2^1+a_1·2^0=\sum\limits_{i=1}^na_i·2^{i-1}$ 多次询问 $[0,B]$ 区间内 $F$ 值小于等于 $F(A)$ 的数的个数. 输入 The first line has a number T (T <= 10000) , indicating the number…
F. Group Projects 题目连接: http://www.codeforces.com/contest/626/problem/F Description There are n students in a class working on group projects. The students will divide into groups (some students may be in groups alone), work on their independent piec…
题意:求0~f(b)中,有几个小于等于 f(a)的. 解题关键:数位dp #include<bits/stdc++.h> using namespace std; typedef long long ll; ; ][maxn],a[]; int get(int x){ ; while(x){ a[pos++]=x%; x/=; } return pos; } int f(int x){ ) ; )*+x%; } int dfs(int pos,int sta,bool limit){ ) ;…
传送门 题意 将n个数分成m个集合,\(V_i表示max(x-y),x,y∈第\)i个集合,\(求minΣV_i\) 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移方程为 \[dp[i][j]=min(dp[k][j-1]+(a[i]-a[k+1])^2,dp[i][j])\] 预处理dp[i][i],dp[i][1],开 long long 吐槽 开lld过,开I64d wa,用线段树可以达到\(O(n^2)\) 类似题目:Codeforces Round…
F. Economic Difficulties An electrical grid in Berland palaces consists of 2 grids: main and reserve. Wires in palaces are made of expensive material, so selling some of them would be a good idea! Each grid (main and reserve) has a head node (its num…
题目链接:https://www.nowcoder.com/acm/contest/206/F 题意:一棵 n 个点的树,根为 1,重儿子到父亲的费用为 0,其余为 1,问所有点到 1 的最大总费用是多少. 题解:ans[i]为 i 个点时候的最大费用,dp[i][j]表示若干棵树总大小为 j 并且每棵树的大小不超过 i 时的最大费用,每次循环首先枚举重儿子的大小更新 ans[i],而ans[i]更新后会对每棵树大小最大为 i 的dp数组产生影响,枚举若干棵树的总大小dp[i][j]. #inc…