zoukankan      html  css  js  c++  java
  • 6485. 【GDOI2020模拟02.25】沙塔斯月光

    题目描述


    题解

    镇♂男则反

    如果没有操作3很好办,反着做维护操作1的次数即可

    实际上一次操作3的贡献是zi*(∑i到操作1位置的距离)

    维护一下即可O(n^4)

    code

    #include <bits/stdc++.h>
    #define fo(a,b,c) for (a=b; a<=c; a++)
    #define fd(a,b,c) for (a=b; a>=c; a--)
    #define max(a,b) (a>b?a:b)
    #define ll long long
    #define file
    using namespace std;
    
    int NUM,T,n,i,j,k,l;
    ll x[81],y[81],z[81],f[82][81][3161],ans;
    
    int main()
    {
    	freopen("fortune.in","r",stdin);
    	#ifdef file
    	freopen("fortune.out","w",stdout);
    	#endif
    	
    	scanf("%d",&NUM);
    	scanf("%d",&T);
    	for (;T;--T)
    	{
    		scanf("%d",&n);
    		fo(i,1,n)
    		scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
    		
    		memset(f,255,sizeof(f));
    		ans=0;
    		
    		f[n+1][0][0]=0;
    		fd(i,n+1,2)
    		{
    			fo(j,0,n-i+1)
    			{
    				fd(k,(n-i)*(n-i+1)/2,0)
    				if (f[i][j][k]>-1)
    				{
    					f[i-1][j+1][k+j]=max(f[i-1][j+1][k+j+1],f[i][j][k]+x[i-1]);
    					f[i-1][j][k+j]=max(f[i-1][j][k+j],f[i][j][k]+max(y[i-1]*j,z[i-1]*(k+j)));
    				}
    			}
    		}
    		
    		fo(j,0,n)
    		{
    			fd(k,(n-1)*n/2,0)
    			ans=max(ans,f[1][j][k]);
    		}
    		printf("%lld
    ",ans);
    	}
    	
    	fclose(stdin);
    	fclose(stdout);
    	
    	return 0;
    }
    
  • 相关阅读:
    P1064 金明的预算方案
    P1062 数列
    P2258 子矩阵
    P1095 守望者的逃离
    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
    P1203 [USACO1.1]坏掉的项链Broken Necklace
    P1478 陶陶摘苹果(升级版)
    P2485 [SDOI2011]计算器
    逆元模板
    CloudStack 物理网络架构
  • 原文地址:https://www.cnblogs.com/gmh77/p/12374012.html
Copyright © 2011-2022 走看看