|
なるほど。とりあえず全探索をするしかないと思い解いてみたのですがなぜか答えが間違っているとかえってくるのですがなにがまちがっているのでしょうか?
サンプルの値は正しく出力されるので何が間違っているのかわかりません。
#include<stdio.h>
#include<algorithm>
using namespace std;
int salary(int pipe2[],int joint2[],int n2);
int main(void)
{
int n=0; //パイプの本数を格納する変数
int pipe_length[65000]; //パイプの長さを格納する変数
int joint_length[65000]; //ジョイントの長さを格納する変数
while(scanf("%d",&n) && n>0)
{
for (int i=0;i<n;i++)
{
scanf("%d",&pipe_length[i]);
}
for (int i=0;i<n-1;i++)
{
scanf("%d",&joint_length[i]);
}
printf ("%d\n",salary(pipe_length,joint_length,n));
}
}
int salary(int pipe2[],int joint2[],int n2)
{
int number=0;
int count_pipe=0;
int count_joint=0;
int length=0;
int ver1=0;
int ver2=0;
int money=0;
int syou[65000];
sort(joint2,joint2+n2-1);
reverse(joint2,joint2+n2-1);
//ジョイントをつなげない場合の長さの合計を求める
for (int i=0;i<n2;i++)
{
length+=pipe2[i];
number++;
}
ver1=number*length;
//全探索
for (int i=0;i<n2;i++)
{
length+=joint2[i];
number--;
syou[i]=length*number;
}
//全探索の最適解を取り出す
for (int i=0;i<n2;i++)
{
ver2=syou[0];
if (ver2<syou[i])
{
ver2=syou[i];
}
}
money=max(ver1,ver2);//最大値を求める
if (ver1==ver2)
{
money=ver1;
}
return(money);
}
|