PATA1045答案错误,求解啊啊啊啊啊
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn=205;
const int maxl=10004;
int hashtable[maxn],tw[maxl];
int dp[maxl];
int main()
{
int n,m,l;
memset(hashtable,-1,sizeof(hashtable));//找不到为-1
scanf("%d",&n);//颜色总数
scanf("%d",&m);//喜欢的
for(int i=0;i<m;i++){
int colour;
scanf("%d",&colour);
hashtable[colour]=i;//映射为数字
}
scanf("%d",&l);//条纹的长度
int num=0;
for(int i=0;i<l;i++){
int temp;
scanf("%d",&temp);
if(hashtable[temp]>=0){
tw[num]=hashtable[temp];
num++;
}
}
for(int i=0;i<num;i++){
//printf("%d ",tw[i]);
dp[i]=1;//初始化
}
int ans=-1;
//对tw序列找递增的
for(int i=1;i<num;i++){
for(int j=0;j<i;j++){
if(tw[j]<=tw[i]){//前面的小
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);//最长不下降
}
printf("%d\n",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn=205;
const int maxl=10004;
int hashtable[maxn],tw[maxl];
int dp[maxl];
int main()
{
int n,m,l;
memset(hashtable,-1,sizeof(hashtable));//找不到为-1
scanf("%d",&n);//颜色总数
scanf("%d",&m);//喜欢的
for(int i=0;i<m;i++){
int colour;
scanf("%d",&colour);
hashtable[colour]=i;//映射为数字
}
scanf("%d",&l);//条纹的长度
int num=0;
for(int i=0;i<l;i++){
int temp;
scanf("%d",&temp);
if(hashtable[temp]>=0){
tw[num]=hashtable[temp];
num++;
}
}
for(int i=0;i<num;i++){
//printf("%d ",tw[i]);
dp[i]=1;//初始化
}
int ans=-1;
//对tw序列找递增的
for(int i=1;i<num;i++){
for(int j=0;j<i;j++){
if(tw[j]<=tw[i]){//前面的小
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);//最长不下降
}
printf("%d\n",ans);
return 0;
}
全部评论
大佬这个分享有收藏的必要
用bitset来实现hashtable可行吗
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
04-10 16:01
广东工业大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享