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;
    }
    
  • 相关阅读:
    概率算法_二项分布和泊松分布
    数据库_存储过程简介(oracle版)
    机器学习算法_knn(福利)
    统计算法_概率基础
    统计算法_数值/线性关系度量
    Python总结
    Python 冒泡排序法分析
    Oracle练习详解
    LINUX基础了解
    LINUX下OA搭建
  • 原文地址:https://www.cnblogs.com/gmh77/p/12374012.html
Copyright © 2011-2022 走看看