HDU5773 The All-purpose Zero(LIS变形)
2017-09-01 12:19
183 查看
题意:
可以将0替换成任意interger(包括负数),在此基础上求最长递增子序列。
思路:
将所有的0全部提取出来,求出此时序列的LIS(不含0的),这是针对0在子序列的外面的情况,如0,1,2,3,0.那么如果0在子序列中间怎么办?
很简单,把读入的非0的数的值减去这个数前面0的个数即可,
如1,2,0,3,4。在提取出0后序列其实为1,2,2,3,LIS的长度为3,加上0的个数则为答案。
#include<bits/stdc++.h>
using namespace std;
#define N 100005
template <class T> inline void in(T &x)
{
T f = 1;
char c;
while ((c = getchar()) < '0' || c > '9') if (c == '-') f = -1;
x = c - '0';
while ((c = getchar()) >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0';
x *= f;
}
int dp
, sum
, a
, n;
bool vis
;
void solve(int kase)
{
in(n);sum[0]=0;
memset(vis, false, sizeof(vis));
for(int i=1; i<=n; i++)
{
in(a[i]);
if(a[i]==0) sum[i]=sum[i-1]+1, vis[i]=true;
else sum[i]=sum[i-1], a[i]-=sum[i];
}
int ans=sum
, cnt=0;
dp[0]=-1e9;
for(int i=1; i<=n; i++)
{
if(vis[i]) continue;
if(a[i]>dp[cnt]) dp[++cnt]=a[i];
else
{
int pos=lower_bound(dp, dp+cnt+1, a[i])-dp;
dp[pos]=a[i];
}
}
ans+=cnt;
printf("Case #%d: %d\n", kase, ans);
}
int main()
{
int t, kase=0;in(t);
while(t--)
{
solve(++kase);
}
return 0;
}
可以将0替换成任意interger(包括负数),在此基础上求最长递增子序列。
思路:
将所有的0全部提取出来,求出此时序列的LIS(不含0的),这是针对0在子序列的外面的情况,如0,1,2,3,0.那么如果0在子序列中间怎么办?
很简单,把读入的非0的数的值减去这个数前面0的个数即可,
如1,2,0,3,4。在提取出0后序列其实为1,2,2,3,LIS的长度为3,加上0的个数则为答案。
#include<bits/stdc++.h>
using namespace std;
#define N 100005
template <class T> inline void in(T &x)
{
T f = 1;
char c;
while ((c = getchar()) < '0' || c > '9') if (c == '-') f = -1;
x = c - '0';
while ((c = getchar()) >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0';
x *= f;
}
int dp
, sum
, a
, n;
bool vis
;
void solve(int kase)
{
in(n);sum[0]=0;
memset(vis, false, sizeof(vis));
for(int i=1; i<=n; i++)
{
in(a[i]);
if(a[i]==0) sum[i]=sum[i-1]+1, vis[i]=true;
else sum[i]=sum[i-1], a[i]-=sum[i];
}
int ans=sum
, cnt=0;
dp[0]=-1e9;
for(int i=1; i<=n; i++)
{
if(vis[i]) continue;
if(a[i]>dp[cnt]) dp[++cnt]=a[i];
else
{
int pos=lower_bound(dp, dp+cnt+1, a[i])-dp;
dp[pos]=a[i];
}
}
ans+=cnt;
printf("Case #%d: %d\n", kase, ans);
}
int main()
{
int t, kase=0;in(t);
while(t--)
{
solve(++kase);
}
return 0;
}
相关文章推荐
- hdu5773 The All-purpose Zero(LIS变形)
- The All-purpose Zero---hdu5773(LIS变形)
- hdu5773--The All-purpose Zero(LIS变形)
- HDU5773 The All-purpose Zero(LIS)
- (多校第四场1010)HDU5773 The All-purpose Zero(LIS)
- HDU 5773 The All-purpose Zero (LIS变形)
- 【HDU】-5773-The All-purpose Zero(LIS变形,思维)
- HDU 5773 The All-purpose Zero【LIS变形】
- 2016 Multi-University Training Contest 4 1010 The All-purpose Zero(变形LIS)
- Hdu-5773 The All-purpose Zero(LIS变形)
- HDU-5773 The All-purpose Zero(LIS变形)
- hdu5773-LIS&技巧-The All-purpose Zero
- HDU 5773 The All-purpose Zero (变形LIS)
- HDU 5773 The All-purpose Zero ( LIS 变形 )
- HDU 5773 The All-purpose Zero(贪心LIS)
- HDU5773(The All-purpose Zero LIS变形)
- hdu 5773 The All-purpose Zero 思维转化+nlogn LIS
- HDU 5773 The All-purpose Zero(LIS)
- HDU5773:The All-purpose Zero
- HDU Problem 5773 The All-purpose Zero 【LIS】