Bestcoder比赛再次爆0(应该是一直是0)

来源:互联网 发布:window 安装ubuntu 编辑:程序博客网 时间:2024/05/18 00:09

挺受打击的,哎.......

但是略有收获,遍历一个数组所有的组合,共有2^n-1种;

参考:http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html

我改造之后的代码(遍历全部):

#include <stdio.h>void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len);void combine_decrease(int* arr, int start, int* result, int count, const int NUM);int main(){  int arr[] = {1, 2, 3, 4, 5, 6};  int num;  int result[7];  for(num=1;num<=6;num++){combine_increase(arr, 0, result, num, num, sizeof(arr)/sizeof(int));  printf("分界线\n");  combine_decrease(arr, sizeof(arr)/sizeof(int), result, num, num);  printf("--------------------------------------------------------\n");  }  return 0;}//arr为原始数组//start为遍历起始位置//result保存结果,为一维数组//count为result数组的索引值,起辅助作用//NUM为要选取的元素个数//arr_len为原始数组的长度,为定值void combine_increase(int* arr, int start, int* result, int count,  int NUM, int arr_len){  int i = 0;  for (i = start; i < arr_len + 1 - count; i++)  {    result[count - 1] = i;    if (count - 1 == 0)    {      int j;      for (j = NUM - 1; j >= 0; j--)        printf("%d\t",arr[result[j]]);      printf("\n");    }    else      combine_increase(arr, i + 1, result, count - 1, NUM, arr_len);  }}//arr为原始数组//start为遍历起始位置//result保存结果,为一维数组//count为result数组的索引值,起辅助作用//NUM为要选取的元素个数void combine_decrease(int* arr, int start, int* result, int count,  int NUM){  int i;  for (i = start; i >=count; i--)  {    result[count - 1] = i - 1;    if (count > 1)    {      combine_decrease(arr, i - 1, result, count - 1, NUM);    }    else    {      int j;      for (j = NUM - 1; j >=0; j--)    printf("%d\t",arr[result[j]]);      printf("\n");    }  }}
今天就看了一道题,还没做出来,挺心塞的。

hdu1049(把队友的代码粘过来,参考一下吧):

#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int b[30];int n;bool cmp(int a,int b){    return a>b;}int Find(int k,int star);int main(){    int T;    scanf("%d",&T);    while(T--){        int a;        scanf("%d%d",&n,&a);        int i,j;        for(i = 0;i<n;i++)            scanf("%d",&b[i]);        sort(b,b+n,cmp);        int cnt = 0;        int term;        int p = 0;        for(i = 0;i<n;i++){            if(a>=b[i]){                if(p == 0){                    term = a%b[i];                    p++;                }                else{                    term = term%b[i];                    p++;                }                if(Find(term,i+1)||term == 0)                    break;            }        }        if(i == n)            printf("-1\n");        else if(term == 0)            printf("1\n");        else            printf("%d\n",p+1);    }    return 0;}int Find(int k,int star){    int i;    for(i = star;i<n;i++)        if(k == b[star])            return 1;    return 0;}

慢慢来,加油!!!

0 0
原创粉丝点击