いしけつごうもんだい
1572 ワード
試験問題の情報は1つの園形運動場の周囲にN山の石(N≦100)を置いて、今石を順番に1山に合併します.毎回隣接する2つの山を選んで新しい山に結合するしかなく、新しい石の数を、この合併の得点として記録することを規定しています.①N-1回の併合を行い、得点の合計が最小となるように、石を併合する案を選択する.②N-1回の併合を行い、得点の合計が最大となるように石を併合する案を選択する.例えば、示された4つの石のうち、1つの石の数(一番上の山から順時針数)は4594の順である.3回の併合得点合計が最小となるシナリオ:8+13+22=43
得点が一番大きいのは14+18+22=54です
実装コード:
得点が一番大きいのは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