• P1220 关路灯(提高+)


    以下内容转自z2415445508
    只是为了方便自己复习而已
    题目传送门-->关路灯

    我是一条憨憨的分割线

    关灯不需要额外的时间,经过了灯就关了。但是可能折返回去关某一个大灯会比继续往下走关接下来的一个小灯更优,

    那么可以得到两种状态(沿着当前方向继续往下走,改变方向回去关灯)。

    我们需要得到的整个关灯过程中的最优值(最小耗能)

    那么要设计的状态转移方程中肯定有两种方案(折返的,不撞墙不回头的)

    又因为如果想要关某一区间的灯的过程中耗能最小,所以可以转换成一个个区间来写:

    去关某一区间的灯,那么整条街道上除了这一区间的灯会逐渐灭掉其他肯定会全亮。

    那么我们把(f[i][j])记为当从i到j的灯都熄灭后剩下的灯的总功率。

    再进一步:(f[i][j][0])表示关掉i到j的灯后,老张站在i端点,(f[i][j][1])表示关掉([i][j])的灯后,老张站在右端点

    (i为左端点,j为右端点)

    (f[i][j][0])会由两种方案推导而来(上面有写。):折返回来关(i,j)的灯、由(i+1)深入,继续关第i盏灯从而扩展到((i,j))

    所以得到状态转移方程:

    (f[i][j][0] = min ( f[i+1][j][0] + ( a[i+1] - a[i] ) * ( sum[i] + sum[n] - sum[j] ) , f[i+1][j][1] + ( a[j]-a[i] ) * ( sum[i]+sum[n]-sum[j]) );)

    (f[i][j][1] = min ( f[i][j-1][0] + ( a[j] - a[i] ) * ( sum[i-1] + sum[n] - sum[j-1] ) , f[i][j-1][1] + ( a[j]-a[j-1] ) * ( sum[i-1] + sum[n] - sum[j-1] ) );)

    (枚举现在的路灯l(2-n,因为第c位的路灯已经被关了),(i+l-1<=n)(路只有这么长),(j=i+l-1)(右端点))

    因为最后不知道老张到底站在左端点最优还是站在右端点最优

    所以在(f[1][n][0])(f[1][n][1])中取(min)输出。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n,c;
    int a[59],v[59],sumn[59];
    int dp[51][51][2];
    int main()
    {
    	cin>>n>>c;
    	for(int i=1;i<=n;i++)	cin>>a[i]>>v[i],sumn[i]=sumn[i-1]+v[i];
    	memset(dp,127,sizeof(dp));
    	dp[c][c][1]=dp[c][c][0]=0;
    	for(int l=2;l<=n;l++)
    	{
    		for(int i=1;i+l-1<=n;i++)
    		{
    			int j=i+l-1;
    			dp[i][j][0]=min(dp[i+1][j][0]+(a[i+1]-a[i])*(sumn[i]+sumn[n]-sumn[j]),dp[i+1][j][1]+(a[j]-a[i])*(sumn[n]+sumn[i]-sumn[j]));
    			dp[i][j][1]=min(dp[i][j-1][0]+(sumn[n]-sumn[j-1]+sumn[i-1])*(a[j]-a[i]),dp[i][j-1][1]+(a[j]-a[j-1])*(sumn[n]-sumn[j-1]+sumn[i-1]));
    		}
    	}
    	cout<<min(dp[1][n][0],dp[1][n][1]);
    	return 0;
    }
    
  • 相关阅读:
    http://www.cnblogs.com/zhengyun_ustc/p/55solution2.html
    http://www.cnblogs.com/carekee/articles/1854674.html
    http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
    http://honda418.iteye.com/blog/337052/
    解决myeclipse每次启动注册码过期输入注册码
    JavaScript只能为汉字
    解决 不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接
    websphere变成英文了怎么变回中文
    【技术贴】解决MySql连接不上 ip远程连接Host is not allowed to conn
    【技术贴】解决bug mantisbt APPLICATION ERROR #1502 没有找到类别
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12564052.html
Copyright © 2020-2023  润新知