首先易得 TT 的上界满足时一定有 mi=1000,C=1\forall{m_i} = 1000, C = 1。所以对于第 kk 天而言最多一定能收入 10001000 刀乐,而需要支出 Ck2C(k1)2=C(2k+1)=2k+1Ck^2 - C(k - 1)^2 = C(2k + 1) = 2k + 1 刀乐,而最多花费当且仅当 k=Tk = T 时支出 2T+12T + 1 刀乐。又有最优路径一定能保证收入大于支出,所以 2T+110002T + 1 \le 1000,得到 T500T \le 500

所以 T500T \le 500 应该没什么问题吧。

@

3 条评论

  • @ 2025-7-9 15:33:08

    想法很好,但是你这个的做法是每一步都为正收益的情况下,T的上限是500。我课堂上推的是总体收益为正时的T上限。

    • @ 2025-7-9 15:39:21

      但是,老师,在 T>500T > 500 之后,无论怎样操作都不可能是最优解。

      并且在 T500T \le 500 时常数更小,虽然常数小没什么卵用。

  • @ 2025-7-9 10:29:27

    mi=1000,C=1\forall{m_i} = 1000, C = 1 时最优解一定能够保证 每天 均为正收入。

    但老师你的方程 CT21000TCT^2 \le 1000T,只保证了最后结果为非负数,并非是最优解。

    @

    • @ 2025-7-9 10:23:39

      另外,把蒋老师代码的 10001000 改为 500500 仍然可过

      #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;
      }
      
      
      • @ 2025-7-9 10:25:14

        但是数据太水导致 300300 也可过。。。

    • 1

    信息

    ID
    10
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    33
    已通过
    12
    上传者