杭电1051 经典贪心

这题做了真的好久,好在最后经过同学指点,过了

/* title:Wooden Sticks url: http://acm.hdu.edu.cn/showproblem.php?pid=1051 我的做题思想: 主要是通过下表法,首先对数组的length按从小到大排序 然后,通过第一元素开始,进行比较,如果后面的任一 一组数据与当前数据进行比较,length和weight都比目前 length 和 weight 都小的话,就进行标记为-1; 也就是说我们要做的,就是屏蔽掉同一种类型的数据,就是 length 和 weight >= 当前数据的为同一组数据, 最后再进行判断,只要是数据为正的,就是保留下来的 数据类型,也就可以很简单的进行快速的累加。 test case: 3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1 result: 2 1 3 Sample Input 99 4 2 1 9 2 5 4 8 5 4 9 1 8 2 6 2 5 2 4 9 2 8 2 6 2 5 2 Sample Output 2 2 1 */ /* --------------------------------------------------------------- my answer::: ------------------------------------------------------------*/ #include<iostream> #define MIN -1000000 using namespace std; int main() { long tcase, num, len[10000], weight[10000]; long i, j, k, sum, temp; cin >> tcase; while( tcase -- ) { sum = 0; cin >> num; for( i = 0; i < num; i ++ ) { cin >> len[i] >> weight[i] ; } for ( i = 0; i < num - 1; i ++ ) { for ( j = 0; j < num - i - 1; j ++) { if( len[j] >= len [j+1]) { temp = len[j]; len[j] = len[j+1]; len[j+1] = temp; temp = weight[j]; weight[j] = weight[j+1]; weight[j+1] = temp; if( len[j] == len [j+1] && weight[j] > weight[j+1]) { temp = weight[j]; weight[j] = weight[j+1]; weight[j+1] = temp; } } } } for( j = 0; j < num; j ++ ) { if ( len[j] < 0) continue; else { for ( i = j+1; i < num; i ++ ) { if( len[i] >= len[j] && weight[i] >= weight[j]) { temp = len[i]; len[i] = len[j]; len[j] = temp; temp = weight[i]; weight[i] = weight[j]; weight[j] = temp; len[i] = MIN; weight[i] = MIN; } } } } for ( i = 0; i < num; i ++ ) { if (len[i] > -100000 ) sum ++; } cout << sum << endl; } return 0; } /* #include<stdio.h> int main() { long int i,j,k,t,n,s[5000][2],exch[2],w[5000][2],tag; int exchange; scanf("%ld",&t); for(k=0;k<t;k++) { scanf("%ld",&n); for(i=0;i<n;i++) scanf("%ld %ld",&s[i][0],&s[i][1]); for(i=0;i<n;i++) { exchange=0; for(j=n-1;j>i;j--) { if(s[j][0]<s[j-1][0]) { exch[0]=s[j][0]; exch[1]=s[j][1]; s[j][0]=s[j-1][0]; s[j][1]=s[j-1][1]; s[j-1][0]=exch[0]; s[j-1][1]=exch[1]; exchange=1; } else if(s[j][0]==s[j-1][0]) { if(s[j][1]<s[j-1][1]) { exch[0]=s[j][0]; exch[1]=s[j][1]; s[j][0]=s[j-1][0]; s[j][1]=s[j-1][1]; s[j-1][0]=exch[0]; s[j-1][1]=exch[1]; exchange=1; } } } if(exchange==0) break; } w[0][0]=s[0][0]; w[0][1]=s[0][1]; tag=1; for(i=1;i<n;i++) { for(j=0;j<tag;j++) { if(s[i][1]>=w[j][1]) { w[j][0]=s[i][0]; w[j][1]=s[i][1]; break; } } if(j==tag) { w[tag][0]=s[i][0]; w[tag][1]=s[i][1]; tag++; } } printf("%ld/n",tag); } } */

你可能感兴趣的:(ini,input,Exchange,output)