首页 > 其他 > 详细

【DP专题】——洛谷P1220关路灯

时间:2019-09-23 22:09:17      阅读:114      评论:0      收藏:0      [点我收藏+]

第一眼:哇,这题怎么这么眼熟!

见这道题:GO

传送门:GO

 

根本就是一样的题目嘛!


 

反正套路是一样的,就不说什么废话了,直接上代码吧。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int read(){
 4     int x=0,f=1;
 5     char c=getchar();
 6     while(!isdigit(c)){
 7         if(c==-) f=-1;
 8         c=getchar();
 9     }
10     while(isdigit(c)){
11         x=x*10+c-0;
12         c=getchar();
13     }
14     return x*f;
15 }
16 const int N=60;
17 int n,c;
18 int f[N][N][2];
19 int dis[N];
20 int v[N],sum[N];
21 int d(int i,int j){
22     return dis[j]-dis[i];
23 }
24 int val(int i,int j){
25     return sum[n]-sum[j]+sum[i-1];
26 }
27 int main(){
28     n=read();c=read();
29     for(int i=1;i<=n;i++){
30         dis[i]=read();
31         v[i]=read();
32         sum[i]=sum[i-1]+v[i];
33     }
34     memset(f,0x3f,sizeof(f));
35     f[c][c][1]=f[c][c][0]=0;
36     for(int i=2;i<=n;i++){
37         for(int j=1;j+i-1<=n;j++){//(i,j+i-1)
38             int k=j+i-1;
39             f[j][k][0]=min(f[j][k][0],min(f[j+1][k][0]+val(j+1,k)*d(j,j+1),f[j+1][k][1]+val(j+1,k)*d(j,k)));
40             f[j][k][1]=min(f[j][k][1],min(f[j][k-1][1]+val(j,k-1)*d(k-1,k),f[j][k-1][0]+val(j,k-1)*d(j,k)));
41         }    
42     }
43     printf("%d",min(f[1][n][0],f[1][n][1]));
44     return 0;
45 } 

【DP专题】——洛谷P1220关路灯

原文:https://www.cnblogs.com/Nelson992770019/p/11574789.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!