注意读题:
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
*/