越大越聪明吗? 这是一道动态规划题目,这里只提供个人代码:
#include <iostream>
struct elephone
  {
int weight,iq,num;
};
int k,s[1001],max=0,vis[1001],S[1001],dp[1001][1001];
elephone a[1000];

void dpf(int i,int j)
  {
int &ans=dp[i][j];
if(ans!=-1) return;
ans=1;
s[j]=a[i].num+1;
 if(j>max) {for(int q=1;q<=j;q++) S[q]=s[q];max=j;}
for(int p=0;p<k;p++)
 {
if(!vis[p]&&a[p].weight>a[i].weight&&a[p].iq<a[i].iq)
 {
vis[p]=1;
dpf(p,j+1);
vis[p]=0;
}
}
}
int main()
  {
int i=0;
memset(dp,-1,sizeof(dp));
memset(vis,0,sizeof(vis));
while(scanf("%d%d",&a[i].weight,&a[i].iq)==2)
 {
a[i].num=i;
++i;
}
k=i;
for(int q=0;q<k;q++)
 {
vis[q]=1;
dpf(q,1);
vis[q]=0;
}
printf("%d\n",max);
for(int r=1;r<=max;r++)
printf("%d\n",S[r]);
return 0;
}



|