UVA 1839 Alignment

还是最长上升子序列。。。

本题是求队列中任一士兵都能从左边或者右边看到队伍外;

即某一士兵左边为上升子序列,右边为下降子序列。求两个序列和,再用总数减去;

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #define maxn 1005
 6 using namespace std;
 7
 8 double d[maxn];
 9 int dp[maxn],dp2[maxn];
10
11 int main (){
12     int n;
13     while (~scanf ("%d",&n)){
14         for (int i=0;i<n;i++)
15             scanf ("%lf",&d[i]);
16         int ans=0;
17         for (int i=0;i<n;i++){
18             dp[i]=1;
19             for (int j=0;j<i;j++){
20                 if (d[j]<d[i])
21                     dp[i]=max (dp[i],dp[j]+1);
22             }
23         }
24         for (int i=0;i<n/2;i++){
25             double temp;
26             temp=d[i];d[i]=d[n-i-1];d[n-i-1]=temp;
27         }
28         for (int i=0;i<n;i++){
29             dp2[i]=1;
30             for (int j=0;j<i;j++){
31                 if (d[j]<d[i])
32                     dp2[i]=max (dp2[i],dp2[j]+1);
33             }
34         }
35         for (int i=0;i<n;i++){
36             for (int j=0;j<n-i-1;j++){
37                 ans=max (ans,dp[i]+dp2[j]);//cout<<i<<":"<<dp[i]<<" "<<j<<":"<<dp2[j]<<endl;
38             }
39         }
40         printf ("%d\n",n-ans);
41     }
42     return 0;
43 }

UVA 1839 Alignment

时间: 2024-12-08 05:46:41

UVA 1839 Alignment的相关文章

UVa 1593 - Alignment of Code

题目描述 : 输入若干行代码,按照要求格式输出,.各列单词尽量靠左,单词之间至少要一个空格. 思路 : 利用字符串数组找规律.  只要控制好边界其他的都很简单.  连测试用例都没有用,因为UVa网页老刷不出来.直接交代码QuickSubmit,只是担心会超时,但结果令人意外,竟然是AC.再来两道吧.      对了 我又不好意思的用了正则表达式. 代码 : <p>import java.util.*; import java.util.regex.Matcher; import java.ut

UVa 1593 Alignment of Code(字符串)

题意  按要求对齐代码 字符串流的应用 #include <bits/stdc++.h> using namespace std; const int N = 1005, M = 200; string s[N][M], line; int cw[M], cn[N]; int main() { int r = 0, c = 0; while(getline(cin, line)) { stringstream ss(line); while(ss >> s[r][c]) { if(

UVA 1593: Alignment of Code(模拟 Grade D)

题意: 格式化代码.每个单词对齐,至少隔开一个空格. 思路: 模拟.求出每个单词最大长度,然后按行输出. 代码: #include <cstdio> #include <cstdlib> #include <cstring> char words[1200][190][90]; int maxLen[190]; char tmp[200]; typedef char * pchar; int readStr(pchar &str, char *out) { in

UVa第五章STL应用 习题((解题报告))详细!

例题5--9 数据库 Database UVa 1592 <strong><span style="font-size:18px;"><span style="font-size:18px;"><strong><span style="font-size:18px;">#include<iostream> #include<string> #include<

UVa 1593 (水题 STL) Alignment of Code

话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]);    这个是设置输出宽度的,但是默认是在右侧补充空格 所以就要用cout.setf(ios::left);来设置一下左对齐. 1 #include <iostream> 2 #include <cstdio> 3 #include <sstream> 4 #include <vector> 5 #include &l

UVA 562 Dividing coins --01背包的变形

01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 50007 int c[102],d

UVA 10341 Solve It

Problem F Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of multiple test cases and te

UVA 11014 - Make a Crystal(容斥原理)

UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O).那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n).n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的.比方f(6)在f

[UVa] Palindromes(401)

UVA - 401 Palindromes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDED