viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8efa11d02831dd2ecabb386674d2cf3d2b24d2c2634172f730f280440c6c5bd5fa2d1a08428ecf97d7683cc5ca77515fa1456533cee54a4e30





저는 가치 / 평균 값 구한다음

가성비 좋은 순으로 나열하고

그다음 위에서 부터 넣었는데


그러면 최대 무게로 우겨넣는걸 못함

-설명-

물건 3개 총무게 5

가치 1 무게 1

가치 3 무게 3

가치 4 무게 4

이렇게 나오면


위에서 1,2번 넣고 끝남

근데 1,3번 넣는게 총 가치가 더 높잖아


이부분을 어떻게 해야할지 모르겠음




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8efa11d02831dd2ecabb386674d2cf3d2b24d2c2634172f730f280440c6c5bd5fa4077034f825f41e6c4d3c6b9e6baba63d874f5d88d4313f34c


예시를 들자면 이런 상황임

1번은 평균가치가 높아서 제일 먼저 들어가지만

총 무게가 10이나 남는 상황

1번(04,05)을 빼고 4번(08,14)를 넣어도되는 상황인데


어케하면 좋을까?

이런거 태어나서 처음해봐서 어렵넹..



첨부파일로 C# 짜놓은거 텍스트파일로올렸음 (안올라가네??)


걍 복붙함

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


class Bagging

{

    static void Main(string[] args)

    {

        List<int> W = new List<int>();

        List<int> V = new List<int>();

        List <float> VW = new List<float>();

        Random rand = new Random();

        int N = rand.Next(1, 101);

        int K = rand.Next(1, 1001);

        int Total_V = 0;

        int Total_W = 0;


        Console.WriteLine("개수" + N + "  |  총무게" + K + "  |\n");

        for (int i = 0; i < N; i++)

        {

            W.Add(rand.Next(1, 100001));

            V.Add(rand.Next(1, 1001));

            VW.Add(((float)V[i] / W[i]));

            Console.WriteLine("가치" + V[i].ToString("D2") + "  |무게" + W[i].ToString("D2") + "  |평균" + VW[i].ToString("N3"));

        }


        int tempV = 0;

        int tempW = 0;

        float tempVW = 0;

        int t = 0;

        Console.WriteLine("\n변경후------------------\n");

        for (int i = 0; i < N; i++)

        {

            tempV = V[i];

            tempW = W[i];

            tempVW = VW[i];

            t = i;

            for (int k = i; k < N; k++)

            {

                if(VW[k] > tempVW)

                {

                    tempVW = VW[k];

                    tempV = V[k];

                    tempW = W[k];

                    t = k;

                }

            }

            VW[t] = VW[i];

            V[t] = V[i];

            W[t] = W[i];

            VW[i] = tempVW;

            V[i] = tempV;

            W[i] = tempW;

        }

        for (int i = 0; i < N; i++)

        {

            Console.WriteLine("가치" + V[i].ToString("D2") + "  |무게" + W[i].ToString("D2") + "  |평균" + VW[i].ToString("N3"));

        }


        for (int i = 0; i < N; i++)

        {

            if (Total_W + W[i] > K)

            {


            }

            else

            {

                Total_V += V[i];

                Total_W += W[i];

            }

        }

        Console.WriteLine("\n총 가치 = " + Total_V + "|  총 무게 = " + Total_W + "\n");

    }

    

}