最少攔截系統
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19094 Accepted Submission(s): 7564
怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裏來求救了,請幫助計算一下最少需要多少套攔截系統.
#include<stdio.h>
int dp[1100], a[1100], n;
int main()
{
while(~scanf("%d",&n)) //位求反
{
int ans = 0, i, j;
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]); //逐次輸入存進去
dp[i] = 1;
for(j = i - 1; j >= 0; j--) //大於一才判斷
if(a[i] > a[j] && dp[j] + 1 > dp[i]) //從頭到尾擼一遍錯序共有多少組
dp[i] = dp[j] + 1;
ans = ans > dp[i] ? ans : dp[i]; //ans記錄上次錯序,dp是本次的錯序
}
printf("%d\n", ans);
}
}
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n, m, i, j, flag = 0, d[1100], s[1100];
while(scanf("%d", &n) != EOF)
{
for(i = 0;i < n; i++) scanf("%d", &d[i]);
m = 1;
s[m] = d[0];
for(i = 0, j = 1;i < n; i++)
{
if (d[i] > s[j])
{
flag = 1;
for(j = 1; j <= m; j++)
{
if (d[i] <= s[j])
{
flag = 0;
break;
}
}
}
if (flag == 1)
{
m++;
j = m;
flag = 0;
}
s[j] = d[i];
}
cout << m << endl;
}
return 0;
}