ZR#954 分组 分手后的思念是犯贱 2024-04-20 10:32 87阅读 0赞 ## ## ZR\#954 分组 ### 解法: ### > 设 $ f\[i\]\[a\]\[b\] $ 表示考虑了排序后的前 $ i $ 个人,目前已经有 $ a $ 个组配好了,还有 $ b $ 个组只有组员没有组长的最小代价。转移时,考虑当前的人是作为组长,加入一个已经有组员的组,还是作为组员新建一个组即可。 > 然后对于有的人重要程度相同的情况,我们需要想办法继续保证组长在组员的后面。则对于重要程度相同的两个人,我们按照他们的志愿排序:先是只能当组员的,然后是都可以的,然后是只能当组长的。 > 时间复杂度:$ O(nk^2) $ ,可以通过前 3 个子任务。 > 然后因为如果 $ k \\times 2 > n $ ,一定无解,所以特判一下就好了。 ### CODE: ### #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long #define N 1001000 #define INF 0x3f3f3f3f3f3f3f3fll LL n,k,f[2][1010][1010]; struct Neo { LL w,s,p; }a[N]; inline bool cmp(Neo x,Neo y) { if(x.w != y.w) return x.w < y.w; return x.p < y.p; } int main() { scanf("%lld%lld",&n,&k); for(int i = 1 ; i <= n ; i++) { scanf("%lld%lld%lld",&a[i].w,&a[i].s,&a[i].p); if(a[i].p == 1) a[i].p = 3; else if(a[i].p == 2) a[i].p = 1; else if(a[i].p == 3) a[i].p = 2; } if(2 * k > n) { puts("-1"); return 0; //system("pause"); } sort(a+1,a+n+1,cmp); memset(f,0x3f,sizeof(f)); f[0][0][0] = 0; int now = 1,las = 0; for(int i = 1 ; i <= n ; i++) { for(int j = 0 ; j <= k ; j++) { for(int l = 0 ; j + l <= k ; l++) { f[now][j][l] = f[las][j][l]; if(a[i].p < 3) { if(l >= 1) f[now][j][l] = min(f[now][j][l],f[las][j][l - 1] + a[i].s); } if(a[i].p > 1) { if(j >= 1) f[now][j][l] = min(f[now][j][l],f[las][j - 1][l + 1]+a[i].s); } } } swap(now,las); } if(f[las][k][0] >= INF) { puts("-1"); return 0; } printf("%lld \n",f[las][k][0]); //system("pause"); return 0; } 转载于:https://www.cnblogs.com/Repulser/p/11448937.html
相关 ZR#997 ZR\997 解法: > 找找规律就出来了,全场最简单的一道题。 CODE: include<iostream> include<cstdi... 怼烎@/ 2024年04月20日 10:34/ 0 赞/ 90 阅读
相关 ZR#999 ZR\999 解法: > 一道计数题,看到要求必须 $ m $ 个标号,所有标号至少出现一次的方案。 > 很容易想到可以容斥,但容斥这个东西是一种很神奇... 清疚/ 2024年04月20日 10:34/ 0 赞/ 85 阅读
相关 ZR#957 ZR\957 解法: > 首先 $ T $ 必须得要是 $ S $ 的子序列,不然不存在好的下标序列,因此一定无解。 > 考虑判断一个串 $ T $ 是... 痛定思痛。/ 2024年04月20日 10:34/ 0 赞/ 88 阅读
相关 ZR#959 ZR\959 解法: > 对于一个询问,设路径 $ (u, v) $ 经过的所有边的 $ gcd $ 为 $ g $,这可以倍增求出。 > 考虑 $ g... Bertha 。/ 2024年04月20日 10:34/ 0 赞/ 91 阅读
相关 ZR#998 ZR\998 解法: > 先把所有物品按照拿走的时间从小到大排序,拿走的时间相同就按照放上去的时间从大到小。那么一件物品上方的物品就一定会在它的前面。 ... 柔光的暖阳◎/ 2024年04月20日 10:33/ 0 赞/ 101 阅读
相关 ZR#954 分组 ZR\954 分组 解法: > 设 $ f\[i\]\[a\]\[b\] $ 表示考虑了排序后的前 $ i $ 个人,目前已经有 $ a $ 个组配好了,还... 分手后的思念是犯贱/ 2024年04月20日 10:32/ 0 赞/ 88 阅读
相关 ZR#956 集合 ZR\956 集合 解法: > 维护一个异或操作的懒标记,并对应的处理插入、删除和异或操作。接下来考虑如何整体加一。 > 考虑一个数字 $ x $ 变为... 待我称王封你为后i/ 2024年04月20日 10:31/ 0 赞/ 80 阅读
相关 ZR#712 消灭砖块 题意: > 很多块砖分布在一个 $ m \\times m $ 的矩阵中,他可以消掉以他为左上角顶点的一个 $ n \\times n $ 的矩阵... 朱雀/ 2024年04月20日 10:24/ 0 赞/ 76 阅读
相关 ZR#710 雷劈数 题意: > 现在给出两个整数,求出位于两个整数之间的所有的“雷劈数。 解法: > 因为雷劈数特殊的性质,所以在数据范围中的雷劈数实际很少,直... ゝ一纸荒年。/ 2024年04月20日 10:24/ 0 赞/ 96 阅读
相关 ZR#996 ZR\996 解法: > 若删除长度为 $ x $ 的子串后序列中没有相同元素,那么一定有至少一个长度为 $ x+1 $ 的子串,删除它后序列中也没有相同元... 怼烎@/ 2024年04月20日 10:23/ 0 赞/ 84 阅读
还没有评论,来说两句吧...