码迷,mamicode.com
首页 > 其他好文 > 详细

关路灯,洛谷dp

时间:2017-08-11 10:50:26      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:int   代码   amp   ges   mic   ret   space   ring   return   

 

题目传送门https://www.luogu.org/problem/show?pid=1220

我们假设 dpij0 为目前最优值是在 i 位置,dpij1 为目前最优值是在 j 位置
则 i 到 j 表示已经关掉的灯的区间,因为我们要求最小的损耗,所以必然是从当前区间走向区间两端
再利用前缀和来算从前一个位置走向当前位置所需要的时间,再乘上没关掉电灯的功率即可
for(i = c to 1)for(j = i+1 to n)

dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][0]+(a[i+1]-a[i])*(b[n]-(b[j]-b[i])));//分4情况,耗能计算,时间乘以功率
dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][1]+(a[j]-a[i])*(b[n]-(b[j]-b[i])));
dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][1]+(a[j]-a[j-1])*(b[n]-(b[j-1]-b[i-1])));
dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][0]+(a[j]-a[i])*(b[n]-(b[j-1]-b[i-1])));

至于这个方程怎么推的,请看解释(只推了第一个方程,其他类比)如下,

时间t=a[i+1]-a[i],距离s=b[n]-(b[j]-b[i])(不懂的可以留言哦!!!

技术分享

代码

//Gang
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define FOR(x,y,z) for(int x=y;x<=z;x++)
#define REP(x,y,z) for(int x=y;x>=z;x--)
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int dp[55][55][3];//dp[i][j][0]表示关掉i to j区间灯后得到最优值在i的位置。//dp[i][j][1]则表示结束后在j的位置
int a[55],b[55],c,n;//a[i]表示每个路灯的位置,b[i]表示每个路灯的功率
int main()
{
    scanf("%d %d",&n,&c);
    FOR(i,1,n)
    {
        scanf("%d %d",&a[i],&b[i]);
        b[i]+=b[i-1];
    }
    FOR(i,1,n)
    FOR(j,1,n)
    dp[i][j][0]=dp[i][j][1]=INF;//求最小值初值符得很大 
    dp[c][c][0]=dp[c][c][1]=0;
    REP(i,c,1)
    {
        FOR(j,i+1,n)
        {
            dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][0]+(a[i+1]-a[i])*(b[n]-(b[j]-b[i])));//分4种情况,耗能计算,时间乘以功率 
            dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][1]+(a[j]-a[i])*(b[n]-(b[j]-b[i])));
            dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][1]+(a[j]-a[j-1])*(b[n]-(b[j-1]-b[i-1])));
            dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][0]+(a[j]-a[i])*(b[n]-(b[j-1]-b[i-1])));
        }
    }
    printf("%d",min(dp[1][n][0],dp[1][n][1]));
    return 0;
}

 

关路灯,洛谷dp

标签:int   代码   amp   ges   mic   ret   space   ring   return   

原文地址:http://www.cnblogs.com/oi-forever/p/7344325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!