WHYZOJ-#116[NOIP模拟] czy把妹(区间DP)

【题目描述】:

Czy是个大丧失,非常喜欢bm。他经常挑战bm的极限,同时b很多的mz。(虽然也许质量不容乐观)

这一天,Czy又开始了他的极限挑战。在一个数轴上有n个maze,她们都在等待着Czy的到来。Czy一开始站在k号妹子的旁边,他需要搞定所有的妹子(由于他向fewdan学会了绝技,所以搞定妹子的时间是无限接近于0的,也就是一瞬间就搞定而不用花额外的时间)。妹子们都很没有耐心,每让她们多等1s,她们就会增加w[i]的不开心值。现在,Czy从k号妹子这里出发,以1m/s的速度开始行动,他希望在搞定所有maze的情况下使得她们的不开心值总和最小,于是他找到了即将在NOIP2017 AK的你来帮他解决这个问题。

【输入描述】:

输入文件的第一行包含一个整数N,2<=N<=1000,表示maze的数量。

第二行包含一个整数V,1<=V<=N,表示开始时czy站在几号maze的旁边。

接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每个妹子,其中0<=D<=1000,0<=W<=1000。D表示MM在数轴上的位置(单位: m),W表示每秒钟会增加的不开心值。(数据按D值有序给出)

【输出描述】:

一个整数,最小的不开心值。(答案不超过10^9)

【样例输入】:

4
3
2 2
5 8
6 1
8 7

【样例输出】:

56

【样例说明】:

【时间限制、数据范围及描述】:

时间:1s 空间:256M

对于40%的数据,2<=n<=7

对于100%的数据,2<=n<=1000 0<=D<=1000 0<=w<=1000

我日昍晶!时隔一年多,终于又让我遇到了区间DP题,然而我这题比赛时调了一个小时没调出来,回来一看发现忘记把每一个小区间外面的值给带上了......

说实话我觉得秤砣这个标程有点问题......秤砣垃圾!

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int MAX=1005;
 5 int n,m;
 6 int f[MAX][MAX][2],pre[MAX];
 7 struct MZ{
 8     int x,y;
 9 }mz[MAX];
10 inline int read(){
11     int an=0,x=1;char c=getchar();
12     while (c<‘0‘ || c>‘9‘) {if (c==‘-‘) x=-1;c=getchar();}
13     while (c>=‘0‘ && c<=‘9‘) {an=an*10+c-‘0‘;c=getchar();}
14     return an*x;
15 }
16 int main(){
17     freopen ("czybm.in","r",stdin);
18     freopen ("czybm.out","w",stdout);
19     int len,i,j;
20     n=read();m=read();pre[0]=0;
21     for (i=1;i<=n;i++){
22         mz[i].x=read();mz[i].y=read();
23         pre[i]=pre[i-1]+mz[i].y;
24     }
25     for (i=1;i<=n;i++) f[i][i][0]=f[i][i][1]=pre[n]*abs(mz[i].x-mz[m].x);
26     for (len=2;len<=n;len++){
27         for (i=1;i<=n-len+1;i++){
28             j=i+len-1;
29             f[i][j][0]=min((pre[n]-pre[j]+pre[i])*(mz[i+1].x-mz[i].x)+f[i+1][j][0],
30                            (pre[n]-pre[j-1]+pre[i-1])*(mz[j].x-mz[j-1].x)+f[i][j-1][1]+(pre[n]-pre[j]+pre[i-1])*(mz[j].x-mz[i].x));
31             f[i][j][1]=min((pre[n]-pre[j-1]+pre[i-1])*(mz[j].x-mz[j-1].x)+f[i][j-1][1],
32                            (pre[n]-pre[j]+pre[i])*(mz[i+1].x-mz[i].x)+f[i+1][j][0]+(pre[n]-pre[j]+pre[i-1])*(mz[j].x-mz[i].x));
33         }
34     }
35     printf("%d",min(f[1][n][1],f[1][n][0]));
36     return 0;
37 }
时间: 2024-10-17 09:05:56

WHYZOJ-#116[NOIP模拟] czy把妹(区间DP)的相关文章

B监狱 noip 模拟 7.29(区间DP)

监狱 题目描述 有一座监狱,有N个牢房,N个牢房呈一字排成一排的.也就是说,第i个牢房紧挨着第i+1个(除了末尾那个).每个牢房里都关押着一名罪犯,总共N名罪犯.    上级要求将某些罪犯释放,给了一份名单,要求每天释放一个人.    位于相邻牢房的罪犯,他们互相之间可以谈话也可以传话,这就使得这里的N名罪犯都可以相互聊天.如果有一个人离开了,那么能和说他上话的人就会很狂躁.如果想让他们安静下来,看守必须给狂躁的人吃一顿火锅.但看守们希望送火锅的次数越少越好.请你计算需要送火锅的次数.123 输

[noip模拟赛]某种数列问题&lt;dp&gt;

某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题.有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,

【NOIP模拟赛】超级树 DP

这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了一种神奇的思想,对于好合并但是不好转移的dp我们可以先打散然后合并到最后,所以我们从一开始维护f[i][j]表示i阶超级树中有j个互不相交的路径的方案数. #include <cstdio> typedef long long LL; LL f[310][310],mod,temp; int n;

【NOIP模拟题】Permutation(dp+高精度)

首先我们可以这样想: 设状态f[i, j]表示1-i序列有j个'<'的方案数 那么考虑转移 因为i比i-1大,所以可以考虑从i-1来转移.首先i是要插入1-i-1这个序列的,所以我们可以思考插入的位置: 仔细推下可得: 当插入的位置原来是‘<'时,答案不会改变 当插入的位置原来是'>'时,答案会+1 当插入左边界时,答案不变 当插入有边界时,答案+1 那么我们知道了前i-1的'<'数量和'>'的数量那么就能转移了 f[i,j]=(j+1)*f[i-1, j]+(max{i-1

【NOIP模拟题】Incr(dp)

太水的dp没啥好说的.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> #include <queue> #include <set> #include <vector> #include <map> usin

noip模拟测试11

T1:string 第一眼秒出思路,这不就是排序那道题的加强版吗? 然而歪?解复杂度虽然是对的,但常数过大,竟被卡到70 歪?解:(实际上std写的就是这个,但据说std被卡掉了 OAO) 因为字符集很小,所以我们可以把区间排序改为区间查询和覆盖 即:先查询区间内所有字符的个数,再从左端点开始按照大小关系依次将长度为字符个数的区间修改为该字符. 期望复杂度O ( 26*mlogn ),实际复杂度O ( 26*mlogn*(巨大的常数) ) 所以需要一(feng)定(kuang)的卡常 正?解:

NOIP模拟赛20161016R1

1.传教士(bishop) 问题描述: panzhili王国的疆土恰好是一个矩形,为了管理方便,国王jjs将整个疆土划分成N*M块大小相同的区域.由于jjs希望他的子民也能信教爱教(”打拳”神教),所以他想安排一些传教士到全国各地去传教.但这些传教士的传教形式非常怪异,他们只在自己据点周围特定的区域内传教且领地意识极其强烈(即任意一个传教士的据点都不能在其他传教士的传教区域内,否则就会发生冲突).现在我们知道传教士的传教区域为以其据点为中心的两条斜对角线上(如图).现在jjs请你帮忙找出一个合理

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况