CF1470A Strange Birthday Party
https://codeforces.com/contest/1471/problem/C
以为是01背包的变形dp,转念一想你见过哪个01背包知道自己选了啥
想压缩吧,又发现这个n实在太大,没了
终于拐到贪心了
想说对每个礼物,让它发挥最大的价值,那么应该在能选的人中,挑一个不送礼代价最大的。
又开始纠结是否存在多个礼物对同一个人还是一个礼物对多个人。
又觉得出现多解的话都一样吧。
最后yy出来的算法是对序列c中当前的最大值,往前找到合法的最小值,然后一直到不能送。
一看题解:1<=c1<=c2<=c3<=c4,wrnm..
那还往前找个啥,直接首尾送就完事儿啊。我想的是针对无序情况的。
这个案件告诉我们好好看题有多重要。
以及好好睡觉有多重要(睡醒了以后想了一半的D题..)
sort后再贪心这个点见过,sort可以排除一些干扰。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<bits/stdc++.h> using namespace std; bool cmp( long long a, long long b) { return a>b; } long long t,n,m,c[400005],k[400005]; int main( ) { //freopen("917.in","r",stdin); cin>>t; while (t--) { cin>>n>>m; for ( int i=1;i<=n;i++) { scanf ( "%lld" ,&k[i]); } for ( int j=1;j<=m;j++) { scanf ( "%lld" ,&c[j]); } long long ans=0; sort(k+1,k+1+n,cmp); int use=1; for ( int i=1;i<=n;i++) { if (use<=m&&c[use]<c[k[i]]) { ans+=c[use]; use++; } else ans+=c[k[i]]; } cout<<ans<<endl; } } |
可以把礼物看做对答案的优化,能送则送(也就是代码里写的c[use]<c[k[i]])。
记录弱到哭出来的我。
分类:
贪心|博弈&构造
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)