Ural 1346
来源:互联网 发布:不用网络的导航 编辑:程序博客网 时间:2024/05/22 02:11
PRO IS HERE
将序列分成最少的段,每段都是非递减,或者非递增的。
dp: dp[i][0] 表示到i点是非递增的划分数
dp[i][1] 表示到i点是非递减的划分数
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<set>#include<queue>#include<map>using namespace std;#define FOR(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)#define DOR(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)#define bug puts("Fuck");#define LL long long#define pb push_back#define mp make_pair#define nMax 101000#define eps 1e-8#define inf 0x7fffffffint s[nMax];int dp[nMax][2];int a,b,n;void sovle(){dp[0][0]=dp[0][1]=1;FOR(i,1,n) {if(s[i-1] > s[i]) {dp[i][0] = min(dp[i-1][0],dp[i-1][1]+1);dp[i][1] = min(dp[i-1][0],dp[i-1][1]) + 1;}else if(s[i-1] < s[i]) {dp[i][0] = min(dp[i-1][0],dp[i-1][1]) + 1;dp[i][1] = min(dp[i-1][0]+1,dp[i-1][1]);}else { dp[i][0] = min(dp[i-1][0],dp[i-1][1]+1) ; dp[i][1] = min(dp[i-1][0]+1,dp[i-1][1]);}//printf("%d - %d %d\n",i,dp[i][0],dp[i][1]);}int ans = min(dp[n][0],dp[n][1]);printf("%d\n",ans);}int main(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin);freopen("output.txt","w",stdout);#endifwhile(~scanf("%d%d",&a,&b)){FOR(i,0,b-a)scanf("%d",&s[i]);n=b-a;sovle();}return 0;}
- Ural 1346
- URAL
- 【ural】
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- NSBundle
- 类名.class
- 小区宽带(动态IP)后接无线路由器的设置
- Gerrit配置
- IIS权限设置的安全相关设置
- Ural 1346
- fstream常用方法详解
- JavaBean代码
- List of 40+ Machine Learning APIs
- 推荐《Linux C编程一站式学习》,入门利器
- oracle ebs ---po
- 一个线程头文件
- XML中嵌入二进制数据的三种方式
- JSP页面跳转大全