int main() { int size; scanf("%d", &size); float * heights = (float*)malloc(size * sizeof(float)); int i; for(i = 0; i < size; ++i) { scanf("%f", &heights[i]); } int * asc = (int*)malloc(size * sizeof(int)); LIS(heights, size, asc); float * reverse_heights= (float*)malloc(size * sizeof(float)); for(i = 0; i < size; ++i) { reverse_heights[i] = heights[size - 1 - i]; } int * desc = (int*)malloc(size * sizeof(int)); LIS(reverse_heights, size, desc); //for(i = 0; i < size; ++i) //{ // printf("%d\t", asc[i]); //} //printf("\n"); //for(i = 0; i < size; ++i) //{ // printf("%d\t", desc[i]); //} //printf("\n"); int max = INT_MIN; int j; for(i = 0; i < size - 1; ++i) { for(j = size - 2 - i; j >= 0; --j) { if(asc[i] + desc[j] > max) { max = asc[i] + desc[j]; } } } printf("%d\n", size - max); free(asc); free(desc); free(heights); free(reverse_heights); return 0; }
int main(void) { int n; scanf("%d", &n); int array[MAX_LEN]; for (int i = 0; i < n; i++) { scanf("%d", &array[i]); } node dp[MAX_LEN]; for (int i = 0; i < n; i++) dp[i].length = 1; LIS(array, dp, n); int max = dp[0].length; for (int i = 1; i < n; i++) { if (max < dp[i].length) { max=dp[i].length; } } for (int i = 0; i < n; i++) { if (dp[i].length == max) { for (int j = 0; j < max; j++) { printf("%d ", dp[i].a[j]); } printf("\n"); } } }
int main() { int n, i, missle[N], lis[N]; char str[10]; bool first = true; scanf("%d", &n); getchar(); getchar(); while (n--) { if (first) first = false; else putchar('\n'); i = 0; while (gets(str) && str[0]) missle[i++] = getNum(str); int len = LIS(missle, i, lis); printf("Max hits: %d\n", len); for (i = 0; i < len; i++) printf("%d\n", lis[i]); } return 0; }
int main() { int n, dim, temp[10], i; Box box[N]; while (scanf("%d%d", &n, &dim) != EOF) { int lis[N] = {}; for (int k = 0; k < n; k++) { box[k].D = dim; box[k].tag = k + 1;//第0個盒子編號是1 for (i = 0; i < dim; i++) scanf("%d", &box[k].dim[i]); //將各維度由小到大排序 std::sort(box[k].dim, box[k].dim + dim); } //將箱子由小排到大 std::sort(box, box + n, comp); int len = LIS(box, n, lis); //output printf("%d\n", len); for (i = 0; i < len - 1; i++) printf("%d ", lis[i]); printf("%d\n", lis[i]); } return 0; }
int main() { int ar[]={10,22,9,33,21,50,41,60,80}; int n=sizeof(ar)/sizeof(ar[0]); printf("lIS length is %d",LIS(ar,n)); return 0; }
int main(int argc, char *argv[]) { int a[] = { 10, 22, 9, 33, 21, 50, 41, 60 }; int size = sizeof(a)/sizeof(a[0]); printf("Longest Increasing Subsequence = %d\n",LIS(a,size)); }
void LISmain(void){ int nums[] = //{1,2,3,4,5,5,3,2,5,6,7,4}; //{35, 36, 39, 3, 15, 27, 6, 42}; //{5, 4, 3, 2, 1}; {1, -1, 2, -2, 0, 1, 1}; int len = sizeof(nums)/sizeof(nums[0]); printf("%d\n", LIS(nums, len)); }
int main() { int arr[] = {1,-1,2,-3,4,-5,6,-7 }; printf("%d\n", LIS(arr,sizeof(arr)/sizeof(int))); outputLIS( arr, sizeof(arr) / sizeof(int) - 1); printf("\n"); return 0; }
int main() { int n; while (scanf("%d", &n)!=EOF) { BuildSeqAndInitDP(n); printf("%d\n", LIS(n)); } return 0; }
void Assembler::asm_li(Register r, int32_t imm) { #if !PEDANTIC if (isS16(imm)) { LI(r, imm); return; } if ((imm & 0xffff) == 0) { imm = uint32_t(imm) >> 16; LIS(r, imm); return; }
int main() { int size; scanf("%d", &size); int *sequence = (int*)malloc(sizeof(int) * size); int i; for(i = 0; i < size; ++i) scanf("%d", &sequence[i]); printf("%d\n", LIS(sequence, size) ); free(sequence); return 0; }
/** Index value of longest increasing subsequence in O(n^2) - Recursively with dp apporoach. Ultimately this recursive approach is not better than iterative as all sub problems are revisited. **/ int LIS(int i) { if(i == 0) return 1; if (dp[i] != -1) { return dp[i]; } int ans = 1; for(int j = 0; j < i; j++) { if (x[i] > x[j]) { ans = max(ans, 1 + LIS(j)); } } return dp[i] = ans; }
int main(int argc, char *argv[]) { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } printf("%d\n", LIS()); } return 0; }
int main(){ int *a,i, elem; printf("Enter no of elements\n"); scanf("%d", &elem); a = (int*)malloc(sizeof(int)*elem); printf("Enter elements\n"); for(i=0;i<elem;i++){ scanf("%d", &a[i]); } printf("Longest Decresing Subsequence=%d\n", LIS(a, elem)); return 0; }
bool increasingTriplet(vector<int>& nums) { return LIS(nums) >= 3; }
//Seja S o conjunto de todas las sequencias dos n primeiros números naturais. //Defina R(s), com s \in S o conjunto de todas as sequencias que podem //ser geradas rotacionando S. //Defina LIS(s) e LDS(s) como você sabe e sejam |LIS(s)| e |LDS(s)| suas //cardinalidades. //Determinar Max_{s \in S}(Min_{s' \in R(s)}(Min(|LIS(s)|, |LDS(s)|))) int main(int argc, char* argv[]){ char* vector; char* vecRotation; int length = atoi(argv[1]); // int lR_expected = atoi(argv[2]); int num_expected = 0; clock_t start,end; vector = (char*) malloc(length); vecRotation = (char*) malloc(length); start = clock(); unsigned int lmaxS = 0; //Length -1 porque devido a rotação pode sempre deixar o primeiro número fixo, e alternar os seguintes //Dividido por 2, porque a inversão cobre metade do conjunto. unsigned long long counter = fatorial(length-1)/2; unsigned long long index = 0; //Cada loop gera um conjunto de sequências. Elementos de S. Cada elemento possui um conjunto de R sequencias. unsigned int lLIS, lLDS; while(counter > index){ index++; counter--; getSequence(vector, length, index); //printf("%llu --> ", index); //printVector(vector, length); unsigned int lminR = length; lminR = LIS(vector, length); if(lminR <= lmaxS) continue; lLDS = LDS(vector, length); if(lLDS < lminR) lminR = lLDS; if(lLDS <= lmaxS) continue; memcpy(vecRotation,vector,length); int i; for(i = 0; i < length-1; i++){ rotation(vecRotation, length); lLIS = LIS(vecRotation, length); if(lLIS < lminR) lminR = lLIS; if(lLIS <= lmaxS) break; lLDS = LDS(vecRotation, length); if(lLDS < lminR) lminR = lLDS; if(lLDS <= lmaxS) break; } //Define o maior valor encontrado entre os elementos de S if(lmaxS < lminR){ lmaxS = lminR; } } end = clock(); printf("%d -> Tempo: %f s\n",length, (float)(end-start)/CLOCKS_PER_SEC); printf("Lmax S = %d\n",lmaxS); free(vector); free(vecRotation); }
void work(){ LIS(); int res=0; for(int i=1;i<=n;i++) res=max(res,f[i]); printf("%d\n",res); }