• 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;
    }
    
  • 相关阅读:
    HDU-3336-Count the string(扩展KMP)
    洛谷-P3805-Manacher模板
    洛谷-p5410-扩展KMP模板
    HDU-2594-Simpsons' Hidden Talents(kmp, 扩展kmp)
    POJ-3080-Blue jeans(KMP, 暴力)
    [办公应用]两个单独的列数据快速变为两列匹配关联数据
    [办公应用]如何将单词中的部分字母加下划线
    [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)
    [办公自动化]如何让excel图表标签中显示最新值数据
    [计算机故障处理]无法访问网络共享资源
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12564052.html
Copyright © 2020-2023  润新知