贪心与传球
来源:互联网 发布:罗马斗兽场 知乎 编辑:程序博客网 时间:2024/06/05 19:55
对等待时间贪心,很显然想要愤怒值少,等待时间短的先弄最优
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int n;struct st{ int t,d;}a[199999];int cmp(const st & a,const st &b){ if(a.d<b.d||a.d==b.d&&a.t<b.t) return 1; return 0;}int check(){ int t=0,ans=0; for(int i=1;i<=n;i++){ t+=a[i].t; if(t>a[i].d) ans=max(ans,t-a[i].d); } return ans;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i].t); for(int i=1;i<=n;i++) scanf("%d",&a[i].d); sort(a+1,a+n+1,cmp); int w=check(); printf("%d",w);}
先把不在环上的找出来,肯定是以入读为零的为起点这样最长,处理出所有临近环的距离,然后找出环,去掉一条边,接上邻近的距离,求最大值。
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int Maxn=500001;int n;int a[Maxn],d[Maxn],ru[Maxn],c[Maxn],cnt;int h[Maxn],f[Maxn],ans,pre[Maxn];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i],&d[i]); ru[a[i]]++; } for(int i=1;i<=n;i++) if(ru[i]==0) c[++cnt]=i; for(int i=1;i<=cnt;i++) { f[a[c[i]]]=max(f[a[c[i]]],f[c[i]]+d[c[i]]); ru[a[c[i]]]--; if(!ru[a[c[i]]]) c[++cnt]=a[c[i]]; } for(int i=1;i<=n;i++) if(ru[i]){ int s=d[i]; int tot=1; h[1]=i;pre[a[i]]=i; for(int k=a[i];k!=i;k=a[k]){ h[++tot]=k; pre[a[k]]=k; s+=d[k]; } for(int k=1;k<=tot;k++){ ans=max(ans,s-pre[k]+f[k]); } } printf("%d",ans);}
阅读全文
1 0
- 贪心与传球
- 传球游戏
- 传球游戏
- 传球游戏
- 传球游戏
- 传球问题
- 传球游戏
- 传球游戏
- 传球游戏
- 传球游戏
- 传球接力
- 传球接力
- 传球接力
- 传球游戏
- 传球游戏
- 洛谷 1057——传球游戏(递推与递归二分)
- 传球问题终极解决
- sicily 1763传球游戏
- Java中单选按钮和复选按钮的使用
- BZOJ 3831 Little Bird
- Maven插件整合protocol buffer
- 使用 ColorMatrix 对图片进行风格处理
- 数据结构学习笔记4
- 贪心与传球
- tensorflow 学习笔记14 scope命名方式
- php实现邮件群发
- java中string, byte和int转换
- Spring Cloud组件完整demo
- 标准C++中String方法总结
- Matrix Gym
- 剑指offer-连续子数组的最大和
- Oracle之数据库安装