uva103:題目給的是第i個的排位。
CODE:
<span style="font-size:12px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#define INF 0x7fffffff
#define SUP 0x80000000
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const int N=100007;
struct node{
int n,id;
int e[33];
bool operator <(node a) const
{
for(int i=1;i<=n;i++)
{
if(e[i]>a.e[i])
return false;
}
return true;
}
}p[33];
int pre[33],dp[33],G[33][33];
void output(int id)
{
if(pre[id]!=-1)
output(pre[id]);
printf("%d ",p[id].id);
}
inline bool isBigger(int a, int b,int k){
for(int i=1; i<=k; ++i)
if(p[a].e[i]<=p[b].e[i])return false;
return true;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)==2)
{
for(int i=0;i<n;i++)
{
p[i].n=k;
p[i].id=i+1;
for(int j=1;j<=k;j++)
scanf("%d",&(p[i].e)[j]);
sort((p[i].e)+1,(p[i].e)+1+k);
}
sort(p,p+n);
memset(G, 0, sizeof(G));
for(int i=0; i<n-1; ++i){
for(int j=i+1; j<n; ++j){
if(isBigger(j,i,k))
G[i][j]=1;
}
}
mem(pre,-1),mem(dp,0);
int ans=0,id,maxx;
for(int i=0;i<n;i++)
{
maxx=0;
for(int j=0;j<i;j++)
{
if(G[j][i]&&dp[j]>maxx)
{
maxx=dp[j];
pre[i]=j;
}
}
dp[i]=maxx+1;
if(dp[i]>ans)
{
ans=dp[i];
id=i;
}
}
printf("%d\n",ans);
if(pre[id]!=-1)
output(pre[id]);
printf("%d\n",p[id].id);
}
return 0;
}
</span>
uva 10405:有坑,一個串可能有空格!
CODE:
<span style="font-size:12px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#define INF 0x7fffffff
#define SUP 0x80000000
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const int N=1007;
char a[N],b[N];
int dp[N][N];
int main()
{
while(gets(a+1))
{
gets(b+1);
mem(dp,0);
int la=strlen(a+1);
int lb=strlen(b+1);
for(int i=1;i<=la;i++)
{
for(int j=1;j<=lb;j++)
{
if(a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d\n",dp[la][lb]);
}
return 0;
}</span>