- 时间就是金钱(time)
关于 T 的上界
- @ 2025-7-9 10:18:40
3 条评论
-
Gooby SU @ 2025-7-9 15:33:08
想法很好,但是你这个的做法是每一步都为正收益的情况下,T的上限是500。我课堂上推的是总体收益为正时的T上限。
-
@ 2025-7-9 10:23:39另外,把蒋老师代码的 改为 仍然可过 。
#include <bits/stdc++.h> using namespace std; const int N=1005; int n,m,C,cnt,head[N]; int M[N],f[N>>1][N],ans; //f[N>>1][N] struct nood { int nex,to; }; nood e[N<<2]; inline void jia(int u,int v) { e[++cnt].nex=head[u]; head[u]=cnt; e[cnt].to=v; } inline int read() { int sum=0; char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) sum=sum*10+(ch^48),ch=getchar(); return sum; } int main() { freopen("time.in", "r", stdin); freopen("time.out", "w", stdout); n=read(); m=read(); C=read(); for ( int i=1;i<=n;i++ ) M[i]=read(); for ( int i=1;i<=m;i++ ) { int u,v; u=read(); v=read(); jia(v,u); } memset(f,-1,sizeof(f)); f[0][1]=0; for ( int i=1;i<=500;i++ ) {//i<=500 for ( int j=1;j<=n;j++ ) for ( int k=head[j];k;k=e[k].nex ) { int v=e[k].to; if(~f[i-1][v]) f[i][j]=max(f[i][j],f[i-1][v]+M[j]); } if(ans<f[i][1]-C*i*i) ans=f[i][1]-C*i*i; } printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 10
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 33
- 已通过
- 12
- 上传者