题意:输入一个n,然后输入n个数,问你可以划分多少个序列,序列为:其中一个数为c,在它的前面最多可以有c个数。
思路:先排序,然后对于每一个数逐步的找没有被用过的数,且这个数可以符合条件,然后如果没有找到,结果加1;最后就是答案。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int n; 7 int x[200]; 8 int num[200]; 9 int dp[200][200]; 10 bool vis[200]; 11 12 int main() 13 { 14 while(scanf("%d",&n)!=EOF) 15 { 16 for(int i=0; i<n; i++) 17 { 18 scanf("%d",&x[i]); 19 } 20 memset(vis,false,sizeof(vis)); 21 sort(x,x+n); 22 int ans=0; 23 for(int i=0; i<n; i++) 24 { 25 num[i]=1; 26 } 27 for(int i=0; i<n; i++) 28 { 29 int m=num[i]; 30 bool flag=false; 31 for(int j=i; j<n; j++) 32 { 33 if(x[j]>=m&&num[j]==1&&j!=i) 34 { 35 flag=true; 36 num[j]+=m; 37 break; 38 } 39 } 40 if(!flag) ans++; 41 } 42 printf("%d\n",ans); 43 } 44 return 0; 45 }
时间: 2024-09-29 23:30:09