れんぞく遊資問題


ある国がn種類の異なる額面の切手を発行し、封筒ごとに最大m枚の切手しか貼れないことを規定したと仮定する.連続メールボックスの問題は,与えられたnとmに対して切手の額面の最適設計を与え,1枚の封筒に郵便料金1から増分1の最大連続郵便料金区間を貼り付けることを要求する.例えば、n=5、m=4の場合、額面が1、3、11、15、32の5種類の切手が郵便料金を貼ることができる最大連続区間は1~70である.
タイトルタイプ:遡及アルゴリズムは最大m枚の切手を貼ることができるので、遡及時tracebackは何枚目の切手を貼るcountを選んだのか1からコードは以下の通りです.
#include
int n,m; 
int a[100];
int count=1,sum=0;
int flag;
void traceback(int num)
{
    int i;
    if(flag)
        return ;
    if(num==m) {   
        if(sum==count) {
            flag=1;
        }
        return ;
    }
    for(i=0;i<=n;i++) { //   n     ,        
        sum+=a[i];
        traceback(num+1);
        sum-=a[i];
    }
}

int main()
{
    int i;
    scanf("%d%d",&n,&m);
    a[0]=0;
    for(i=1;i<=n;i++) 
        scanf("%d",&a[i]);
    while(1) {
        flag=0;
        traceback(0);
        if(flag==0) //           ,   
            break;
        count++;
    }   
    printf("%d
"
,count); return 0; }