您的位置:首页 > 其它

UVA 111

2014-11-26 19:41 302 查看
  这题简直不要这么难以理解,具体翻译可以看NOCOW上给出的翻译:http://www.nocow.cn/index.php/UVA/111

  理解题意之后很明显是一个球最长上升子序列的dp问题,定义状态dp(i) 为第i个答案能和之前给出的答案组合得到的最高分,那么状态转移方程为dp(i)=max{dp(j)}+1  (0<=j<i)。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n,r[30]={0},ss[30]={0},dp[30]={0};
cin>>n;
for(int i=1;i<=n;i++) cin>>r[i];
int temp;
while(cin>>temp){
int ans=0;
ss[temp]=1;
for(int i=2;i<=n;i++){
cin>>temp;
ss[temp]=i;
}
for(int i=1;i<=n;i++){
int Max=0;
for(int j=0;j<i;j++) if(r[ss[i]]>r[ss[j]]){
if(dp[j]>Max) Max=dp[j];
}
dp[i]=Max+1;
if(dp[i]>ans) ans=dp[i];
}
cout<<ans<<endl;
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UVA