数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz

请教:B题的几点疑问?

[复制链接]
发表于 2003-9-23 08:05:43 | 显示全部楼层
整数规划有没有用?
好像很难用上
而且实现难度很大
发表于 2003-9-23 08:08:37 | 显示全部楼层
// test_CUMCM2003_B.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

double k_mount[10];
double y_mount[10];
double t_per[10];
double dc_time[5][10];
double sc_time[5][10];
int production[5][10];
int sum[5];
int _count[10];

ifstream infile("data.txt");
ofstream outfile("haomiao.out");

typedef vector<int> vec_int;
typedef vector<vec_int> vec_int_int;
vec_int_int result[5];

void initialization();
void readData();
void process();
void output();
void calc();

void initialization()
{

}

bool possible_k(int cp,int i,int j,int k)
{
        double temp = (production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]);
        if (temp > 0.305 || temp < 0.285)
                return false;
        temp = production[cp]+production[cp][j]+production[cp][k];
        if (temp < y_mount[cp]*10000)
        {
                return false;
        }
        return true;
}

bool possible_4_k(int cp,int i,int j,int k,int p)
{
        double temp = (production[cp][p]*t_per[p]+production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]+production[cp][p]);
        if (temp > 0.305 || temp < 0.285)
                return false;
        temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
        if (temp < y_mount[cp]*10000)
        {
                return false;
        }
        return true;
}

bool possible_y(int cp,int i,int j,int k)
{
        double temp = production[cp]+production[cp][j]+production[cp][k];
        if (temp < k_mount[cp]*10000)
        {
                return false;
        }
        return true;

}

bool possible_4_y(int cp,int i,int j,int k,int p)
{
        double temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
        if (temp < k_mount[cp]*10000)
        {
                return false;
        }
        return true;

}

void readData()
{
        for(int i=0;i<10;i++)
        {
                infile>>k_mount;
        }
        for(i=0;i<10;i++)
        {
                infile>>y_mount;
        }
        for(i=0;i<10;i++)
        {
                infile>>t_per;
        }

        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>dc_time[j];
                }
        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>sc_time[j];
                }
        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>production[j];
                }

        process();
        output();
        calc();

}

void process()
{
        // search for A...(k)
        for(int i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_k(0,i,j,k))
                                {
                                        outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[0]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[0].push_back(temp);
                                }

                        }

        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_k(0,i,j,k,p))
                                {
                                        outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[0]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[0].push_back(temp);

                                }

                        }

        // search for B...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_k(1,i,j,k))
                                {
                                        outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[1]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[1].push_back(temp);

                                }

                        }

        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_k(1,i,j,k,p))
                                {
                                        outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[1]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[1].push_back(temp);

                                }

                        }

        // search for C...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(2,i,j,k))
                                {
                                        outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[2]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[2].push_back(temp);

                                }
                        }       
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(2,i,j,k,p))
                                {
                                        outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[2]++;

                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[2].push_back(temp);

                                }
                        }       

        // search for D...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(3,i,j,k))
                                {
                                        outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[3]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[3].push_back(temp);

                                }

                        }
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(3,i,j,k,p))
                                {
                                        outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[3]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[3].push_back(temp);

                                }

                        }

        // search for E...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(4,i,j,k))
                                {
                                        outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[4]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[4].push_back(temp);

                                }

                        }
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(4,i,j,k,p))
                                {
                                        outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[4]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[4].push_back(temp);

                                }

                        }
}

void output()
{
        int total = 1;
        for(int i=0;i<5;i++)
        {
                cout<<i+1<<' '<<sum<<endl;
                total *= sum;
        }
        cout<<"total times need:"<<total<<endl;

}

void calc()
{
        outfile<<endl<<endl;
        int total_count = 0;
        for(int i=0;i<result[0].size();i++)
        {
                for(int j=0;j<result[1].size();j++)
                        for(int k=0;k<result[2].size();k++)
                        {
                                cout<<"i:"<<i<<" j:"<<j<<" k:"<<k<<endl;
                                for(int p=0;p<result[3].size();p++)
                                        for(int q=0;q<result[4].size();q++)
                                        {
                                                for(int _t=0;_t<10;_t++)
                                                        _count[_t] = 0;
                                                for(int ii=0;ii<result[0].size();ii++)
                                                        _count[result[0][ii]]++;
                                                for(int jj=0;jj<result[1][j].size();jj++)
                                                        _count[result[1][j][jj]]++;
                                                for(int kk=0;kk<result[2][k].size();kk++)
                                                        _count[result[2][k][kk]]++;
                                                for(int pp=0;pp<result[3][p].size();pp++)
                                                        _count[result[3][p][pp]]++;
                                                for(int qq=0;qq<result[4][q].size();qq++)
                                                        _count[result[4][q][qq]]++;
                                                bool OK = true;
                                                int _sum = 0;
                                                for(int ww=0;ww<10 && OK;ww++)
                                                {
                                                        if (_count[ww] > 2)
                                                                OK = false;
                                                        if (_count[ww])
                                                                _sum++;
                                                        if (_sum > 7)
                                                                OK = false;
                                                }
                                                if (OK)
                                                {
                                                        cout<<total_count++<<":"<<endl;
                                                        outfile<<endl<<"A:";
                                                        for(int iii=0;iii<result[0].size();iii++)
                                                                outfile<<result[0][iii]+1<<' ';
                                                        outfile<<endl<<"B:";
                                                        for(int jjj=0;jjj<result[1][j].size();jjj++)
                                                                outfile<<result[1][j][jjj]+1<<' ';
                                                        outfile<<endl<<"C:";
                                                        for(int kkk=0;kkk<result[2][k].size();kkk++)
                                                                outfile<<result[2][k][kkk]+1<<' ';
                                                        outfile<<endl<<"D:";
                                                        for(int ppp=0;ppp<result[3][p].size();ppp++)
                                                                outfile<<result[3][p][ppp]+1<<' ';
                                                        outfile<<endl<<"E:";
                                                        for(int qqq=0;qqq<result[4][q].size();qqq++)
                                                                outfile<<result[4][q][qqq]+1<<' ';
                                                        if (total_count >= 1000)
                                                                exit(0);

                                                }
                                               
                                       
                        }
        }

}

int main(int argc, char* argv[])
{
        readData();
        return 0;
}
发表于 2003-9-23 08:10:04 | 显示全部楼层
// test_CUMCM2003_B.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

double k_mount[10];
double y_mount[10];
double t_per[10];
double dc_time[5][10];
double sc_time[5][10];
int production[5][10];
int sum[5];
int _count[10];

ifstream infile("data.txt");
ofstream outfile("haomiao.out");

typedef vector<int> vec_int;
typedef vector<vec_int> vec_int_int;
vec_int_int result[5];

void initialization();
void readData();
void process();
void output();
void calc();

void initialization()
{

}

bool possible_k(int cp,int i,int j,int k)
{
        double temp = (production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]);
        if (temp > 0.305 || temp < 0.285)
                return false;
        temp = production[cp]+production[cp][j]+production[cp][k];
        if (temp < y_mount[cp]*10000)
        {
                return false;
        }
        return true;
}

bool possible_4_k(int cp,int i,int j,int k,int p)
{
        double temp = (production[cp][p]*t_per[p]+production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]+production[cp][p]);
        if (temp > 0.305 || temp < 0.285)
                return false;
        temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
        if (temp < y_mount[cp]*10000)
        {
                return false;
        }
        return true;
}

bool possible_y(int cp,int i,int j,int k)
{
        double temp = production[cp]+production[cp][j]+production[cp][k];
        if (temp < k_mount[cp]*10000)
        {
                return false;
        }
        return true;

}

bool possible_4_y(int cp,int i,int j,int k,int p)
{
        double temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
        if (temp < k_mount[cp]*10000)
        {
                return false;
        }
        return true;

}

void readData()
{
        for(int i=0;i<10;i++)
        {
                infile>>k_mount;
        }
        for(i=0;i<10;i++)
        {
                infile>>y_mount;
        }
        for(i=0;i<10;i++)
        {
                infile>>t_per;
        }

        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>dc_time[j];
                }
        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>sc_time[j];
                }
        for(i=0;i<5;i++)
                for(int j=0;j<10;j++)
                {
                        infile>>production[j];
                }

        process();
        output();
        calc();

}

void process()
{
        // search for A...(k)
        for(int i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_k(0,i,j,k))
                                {
                                        outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[0]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[0].push_back(temp);
                                }

                        }

        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_k(0,i,j,k,p))
                                {
                                        outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[0]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[0].push_back(temp);

                                }

                        }

        // search for B...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_k(1,i,j,k))
                                {
                                        outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[1]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[1].push_back(temp);

                                }

                        }

        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_k(1,i,j,k,p))
                                {
                                        outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[1]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[1].push_back(temp);

                                }

                        }

        // search for C...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(2,i,j,k))
                                {
                                        outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[2]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[2].push_back(temp);

                                }
                        }       
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(2,i,j,k,p))
                                {
                                        outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[2]++;

                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[2].push_back(temp);

                                }
                        }       

        // search for D...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(3,i,j,k))
                                {
                                        outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[3]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[3].push_back(temp);

                                }

                        }
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(3,i,j,k,p))
                                {
                                        outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[3]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[3].push_back(temp);

                                }

                        }

        // search for E...(k)
        for(i=0;i<8;i++)
                for(int j=i+1;j<9;j++)
                        for(int k=j+1;k<10;k++)
                        {
                                if (possible_y(4,i,j,k))
                                {
                                        outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
                                        sum[4]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        result[4].push_back(temp);

                                }

                        }
        for(i=0;i<7;i++)
                for(int j=i+1;j<8;j++)
                        for(int k=j+1;k<9;k++)
                                for(int p=k+1;p<10;p++)
                        {
                                if (possible_4_y(4,i,j,k,p))
                                {
                                        outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
                                        sum[4]++;
                                        vector<int> temp;
                                        temp.push_back(i);
                                        temp.push_back(j);
                                        temp.push_back(k);
                                        temp.push_back(p);
                                        result[4].push_back(temp);

                                }

                        }
}

void output()
{
        int total = 1;
        for(int i=0;i<5;i++)
        {
                cout<<i+1<<' '<<sum<<endl;
                total *= sum;
        }
        cout<<"total times need:"<<total<<endl;

}

void calc()
{
        outfile<<endl<<endl;
        int total_count = 0;
        for(int i=0;i<result[0].size();i++)
        {
                for(int j=0;j<result[1].size();j++)
                        for(int k=0;k<result[2].size();k++)
                        {
                                cout<<"i:"<<i<<" j:"<<j<<" k:"<<k<<endl;
                                for(int p=0;p<result[3].size();p++)
                                        for(int q=0;q<result[4].size();q++)
                                        {
                                                for(int _t=0;_t<10;_t++)
                                                        _count[_t] = 0;
                                                for(int ii=0;ii<result[0].size();ii++)
                                                        _count[result[0][ii]]++;
                                                for(int jj=0;jj<result[1][j].size();jj++)
                                                        _count[result[1][j][jj]]++;
                                                for(int kk=0;kk<result[2][k].size();kk++)
                                                        _count[result[2][k][kk]]++;
                                                for(int pp=0;pp<result[3][p].size();pp++)
                                                        _count[result[3][p][pp]]++;
                                                for(int qq=0;qq<result[4][q].size();qq++)
                                                        _count[result[4][q][qq]]++;
                                                bool OK = true;
                                                int _sum = 0;
                                                for(int ww=0;ww<10 && OK;ww++)
                                                {
                                                        if (_count[ww] > 2)
                                                                OK = false;
                                                        if (_count[ww])
                                                                _sum++;
                                                        if (_sum > 7)
                                                                OK = false;
                                                }
                                                if (OK)
                                                {
                                                        cout<<total_count++<<":"<<endl;
                                                        outfile<<endl<<"A:";
                                                        for(int iii=0;iii<result[0].size();iii++)
                                                                outfile<<result[0][iii]+1<<' ';
                                                        outfile<<endl<<"B:";
                                                        for(int jjj=0;jjj<result[1][j].size();jjj++)
                                                                outfile<<result[0][j][jjj]+1<<' ';
                                                        outfile<<endl<<"C:";
                                                        for(int kkk=0;kkk<result[2][k].size();kkk++)
                                                                outfile<<result[0][k][kkk]+1<<' ';
                                                        outfile<<endl<<"D:";
                                                        for(int ppp=0;ppp<result[3][p].size();ppp++)
                                                                outfile<<result[0][p][ppp]+1<<' ';
                                                        outfile<<endl<<"E:";
                                                        for(int qqq=0;qqq<result[4][q].size();qqq++)
                                                                outfile<<result[0][q][qqq]+1<<' ';
                                                        if (total_count >= 1000)
                                                                exit(0);

                                                }
                                               
                                       
                        }
        }

}

int main(int argc, char* argv[])
{
        readData();
        return 0;
}
发表于 2003-9-23 08:47:48 | 显示全部楼层
能解释一下这个程序是做什么用得吗
 楼主| 发表于 2003-9-23 08:52:10 | 显示全部楼层
对啊
说说啊
要不就白发了啊
发表于 2003-9-23 09:05:45 | 显示全部楼层
什么烂东西
发表于 2003-9-23 09:10:19 | 显示全部楼层
是呀,光有程序有什么用,还不知道能达到目的呢?
而且怎么没有附加的解释说明呢 ?

~~~~~~~
发表于 2003-9-23 09:52:19 | 显示全部楼层
#include "stdafx.h" 出错了?
发表于 2003-9-23 09:54:03 | 显示全部楼层
能否有详细注释?
发表于 2003-9-23 09:54:47 | 显示全部楼层
#include "stdafx.h"出错了
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2025-5-6 16:04 , Processed in 0.056594 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表