P1941 [NOIP2014 提高组] 飞扬的小鸟(线性dp+思维)

题目传送门

注意读题:

1.每一个单位时间可以点击多次(每一个单位时间可上升多次)。
2.如果不点,那么每一个单位时间只能下降一次。

分析状态:

题干中要求问的是最少点击次数,那么我们看dp怎么想这个问题:dp[i][j],代表的是当前到达横坐标i,高度为j的点的时候最少的点击次数,那么我们看当前状态是通过什么状态转移而来的:

1.下降到这里来的。(该情况一定是由上次转化而来的)

状态转移方程是:

  f[i][j]=min(f[i][j],f[i-1][j+down[i]]);

2.上升到这里来的

状态转移方程是:

f[i][j]=min(f[i-1][j-up[i]]+1,f[i][j-up[i]]+1);

左边的就是意味着,从上一次状态转移而来的,(也就是只点了一次),右边意味着,从本状态较低的位置转移而来的,(也就意味着点的次数大于1次)。

3.注意位置更高的位置是不能再上升了。

那么dp[i][j] 在j大于m的时候的意思就是j=m
因此这一步的状态转移方程就是

 f[i][m]=min(f[i][m],f[i][j]);

同时别忘了注意:不可能到达的位置一定要标注。

同时,最后的判断经过了几个水管,本题可以用前缀和来维护一下。

#include<iostream>
#include<algorithm>
#include<cstring> 
#define inf 0x3f3f3f3f 
using namespace std;

int dp[11000][2100];
int u[210000],d[210000];
int l[210000],h[210000];
int p[210000];
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	memset(dp,0x3f,sizeof dp);
	for(int i=1;i<=n;i++){
		cin>>u[i]>>d[i];
		l[i]=1;
		h[i]=m;
	}
	for(int i=1;i<=m;i++){
		dp[0][i]=0;
	}
	for(int i=1;i<=k;i++){
		int uu;
		cin>>uu;
		p[uu]=1;
		cin>>l[uu]>>h[uu];
		l[uu]++;
		h[uu]--;
	}
	for(int i=1;i<=n;i++){
		p[i]=p[i-1]+p[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=u[i]+1;j<=m+u[i];j++){
			dp[i][j]=min(dp[i-1][j-u[i]]+1,dp[i][j-u[i]]+1);
		}
		for(int j=m+1;j<=m+u[i];j++)dp[i][m]=min(dp[i][m],dp[i][j]);
		for(int j=1;j<=m-d[i];j++){
			dp[i][j]=min(dp[i-1][j+d[i]],dp[i][j]);
		}
		for(int j=l[i]-1;j>=0;j--)dp[i][j]=inf;
		for(int j=h[i]+1;j<=m;j++)dp[i][j]=inf;
	}
	int ans=0x3f3f3f3f;
	for(int i=1;i<=m;i++){
		ans=min(ans,dp[n][i]);
	//	printf("--->%d\n",dp[n][i]);
	}
	if(ans!=0x3f3f3f3f){
		printf("1\n%d\n",ans);
	}else{
		printf("0\n");
		for(int i=n-1;i>=0;i--){
			for(int j=1;j<=m;j++){
				if(dp[i][j]<0x3f3f3f3f){
					printf("%d\n",p[i]);
					return 0;
				}
			}
		}
	}
	return 0;
}


/*
 *               ii.                                         ;9ABH,          
 *              SA391,                                    .r9GG35&G          
 *              &#ii13Gh;                               i3X31i;:,rB1         
 *              iMs,:,i5895,                         .5G91:,:;:s1:8A         
 *               33::::,,;5G5,                     ,58Si,,:::,sHX;iH1        
 *                Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG        
 *                .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8        
 *               :SB9s:,............................,,,.,,,SASh53h,1G.       
 *            .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,       
 *          ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi       
 *        i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1       
 *       59;.....,.     .,,,,,,,,,,,...        .............,..:1;.:&s       
 *      s8,..;53S5S3s.   .,,,,,,,.,..      i15S5h1:.........,,,..,,:99       
 *      93.:39s:rSGB@A;  ..,,,,.....    .SG3hhh9G&BGi..,,,,,,,,,,,,.,83      
 *      G5.G8  9#@@@@@X. .,,,,,,.....  iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh     
 *      Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:    
 *     ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M;    ....,,,,,,,,S8    
 *     X3    iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs       ...,,,,,,,:Gs   
 *    r8,        ,,,...,,,,,,,,,,.....  ,h8XABMMHX3r.          .,,,,,,,.rX:  
 *   :9, .    .:,..,:;;;::,.,,,,,..          .,,.               ..,,,,,,.59  
 *  .Si      ,:.i8HBMMMMMB&5,....                    .            .,,,,,.sMr
 *  SS       :: h@@@@@@@@@@#; .                     ...  .         ..,,,,iM5
 *  91  .    ;:.,1&@@@@@@MXs.                            .          .,,:,:&S
 *  hS ....  .:;,,,i3MMS1;..,..... .  .     ...                     ..,:,.99
 *  ,8; ..... .,:,..,8Ms:;,,,...                                     .,::.83
 *   s&: ....  .sS553B@@HX3s;,.    .,;13h.                            .:::&1
 *    SXr  .  ...;s3G99XA&X88Shss11155hi.                             ,;:h&,
 *     iH8:  . ..   ,;iiii;,::,,,,,.                                 .;irHA  
 *      ,8X5;   .     .......                                       ,;iihS8Gi
 *         1831,                                                 .,;irrrrrs&@
 *           ;5A8r.                                            .:;iiiiirrss1H
 *             :X@H3s.......                                .,:;iii;iiiiirsrh
 *              r#h:;,...,,.. .,,:;;;;;:::,...              .:;;;;;;iiiirrss1
 *             ,M8 ..,....,.....,,::::::,,...         .     .,;;;iiiiiirss11h
 *             8B;.,,,,,,,.,.....          .           ..   .:;;;;iirrsss111h
 *            i@5,:::,,,,,,,,.... .                   . .:::;;;;;irrrss111111
 *            9Bi,:,,,,......                        ..r91;;;;;iirrsss1ss1111
 */
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值