[Luogu P1230]智力大冲浪
这道题,贪就对了。
先按照价值排序,从大到小。当前考虑的的就先放到尽可能晚的时间点,为其他的创造机会,如果这一个的所有可用时间段都被占据,就只能扣钱了。
#include<fstream> #include<cmath> #include<iostream> #include<cstdio> #include<cstring> #include <algorithm> using namespace std; bool use[1000],dhs; int m,n; struct f{ int qx,fk; }g[1000]; bool cmp(f a,f b){ return a.fk>b.fk; } int main(){ cin>>m>>n; for(int i=1;i<=n;i++){ scanf("%d",&g[i].qx); } for(int i=1;i<=n;i++){ scanf("%d",&g[i].fk); } sort(g+1,g+n+1,cmp); for(int i=1;i<=n;i++){ if(use[g[i].qx]==0){ use[g[i].qx]=1; } else{ int bj=0; for(int j=g[i].qx-1;j>=1;j--){ if(use[j]==0){ use[j]=1; bj=1; break; } } if(bj==0){ m-=g[i].fk; } } } printf("%d",m); return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步