いしけつごうもんだい

1572 ワード

試験問題の情報は1つの園形運動場の周囲にN山の石(N≦100)を置いて、今石を順番に1山に合併します.毎回隣接する2つの山を選んで新しい山に結合するしかなく、新しい石の数を、この合併の得点として記録することを規定しています.①N-1回の併合を行い、得点の合計が最小となるように、石を併合する案を選択する.②N-1回の併合を行い、得点の合計が最大となるように石を併合する案を選択する.例えば、示された4つの石のうち、1つの石の数(一番上の山から順時針数)は4594の順である.3回の併合得点合計が最小となるシナリオ:8+13+22=43
得点が一番大きいのは14+18+22=54です
実装コード:
#include 
#include 
using namespace std;
int judgemin(vectorlist,int num)
{
    int i,j,k,r,tmp,a[num-1][num-1];
    //      a[i][j]   i j            
    for(i=0; ilist,int num) //       ,             
{
    int i,j,k,r,tmp,a[num-1][num-1];
    //      a[i][j]   i j            
    for(i=0; ia[i][j])
                    a[i][j] = tmp;
            }
        }
    }
    tmp=list.front();
    list.erase(list.begin());
    list.push_back(tmp);
    return a[0][num-1];
}
int main()
{
    int num,i,tmp,themax,themin;
    cin>>num;
    vectorlist;
    for(i=0; i>tmp;
        list.push_back(tmp);
    }
    themin=judgemin(list,num);
    themax=judgemax(list,num);
    tmp=list.front();       //          ,             ;
    list.erase(list.begin());
    list.push_back(tmp);
    if(themin>judgemin(list,num))
    {
        themin=judgemin(list,num);
    }
    if(themax