• loj2292 「THUSC 2016」成绩单


    ref

    我是傻逼,我啥也不会,这是我抄的。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    int n, a, b, w[55], tot, dy[1005], g[55][55], f[55][55][55][55], va[55];
    bool isAll(int i, int j, int l, int r){
    	for(int k=i; k<=j; k++)
    		if(w[k]<l || w[k]>r)
    			return false;
    	return true;
    }
    bool isAny(int i, int j, int l, int r){
    	for(int k=i; k<=j; k++)
    		if(w[k]>=l && w[k]<=r)
    			return true;
    	return false;
    }
    int F(int, int, int, int);
    int G(int, int);
    int F(int i, int j, int l, int r){
    	int &re=f[i][j][l][r];
    	if(re!=-1)	return re;
    	re = 0x3f3f3f3f;
    	if(isAll(i, j, l, r)){
    		re = 0;
    		return 0;
    	}
    	if(!isAny(i, j, l, r)){
    		re = G(i, j);
    		return re;
    	}
    	for(int k=i; k<j; k++){
    		re = min(re, F(i,k,l,r)+F(k+1,j,l,r));
    		re = min(re, G(i,k)+F(k+1,j,l,r));
    	}
    	return re;
    }
    int G(int l, int r){
    	int &re=g[l][r];
    	if(re!=-1)	return re;
    	re = 0x3f3f3f3f;
    	for(int i=1; i<=tot; i++)
    		for(int j=i; j<=tot; j++)
    			if(isAny(l, r, i, j)){
    				int u=va[j], v=va[i];
    				re = min(re, F(l, r, i, j) + a + b * (v - u) * (v - u));
    			}
    	return re;
    }
    int main(){
    	cin>>n>>a>>b;
    	for(int i=1; i<=n; i++){
    		scanf("%d", &w[i]);
    		dy[w[i]] = 1;
    	}
    	for(int i=1; i<=1000; i++)
    		if(dy[i]){
    			va[++tot] = i;
    			dy[i] = tot;
    		}
    	for(int i=1; i<=n; i++)
    		w[i] = dy[w[i]];
    	memset(f, -1, sizeof(f));
    	memset(g, -1, sizeof(g));
    	cout<<G(1, n)<<endl;
    	return 0;
    }
    
  • 相关阅读:
    NS网络仿真,小白起步版,双节点之间的模拟仿真(基于UDP和CBR流)
    Linux学习,ACL权限管理
    SQL中的注释语句
    C#连接SQL Server数据库小贴士
    C#重写ToString
    C#控制台应用程序之选课系统
    浅谈C、C++及其区别、兼容与不兼容
    C++之客户消费积分管理系统
    A*算法
    HTML标签列表总览
  • 原文地址:https://www.cnblogs.com/poorpool/p/9073881.html
Copyright © 2020-2023  润新知