当前位置:网站首页>7-10 punch in strategy

7-10 punch in strategy

2022-07-06 16:44:00 HBUcs2020

Lessons of blood and tears , This seems to be the second one who made such a stupid mistake

All variables in the program must apply for space in advance , Otherwise, there will be all kinds of strange mistakes

Like this

The program runs like this

Look at another one more ridiculous :

This is the source code

This is the result of the operation :

The internal data of the array is strangely changed

Finally, it is corrected as follows :

int N,M;
    cin>>N>>M;
    int a[MAXSIZE][MAXSIZE];
    memset(a,0,sizeof(a));

Complete code :
 

#include<iostream>
#include<vector>
#include<set>
#include<cstring>
//#include<bits/stdc++.h>
using namespace std;
constexpr int MAXSIZE=201;
constexpr int MAXMONEY=0x3f3f3f3f;
int main()
{
    int N,M;
    cin>>N>>M;
    int a[MAXSIZE][MAXSIZE];
    memset(a,0,sizeof(a));
     int x,y,money;
    for(int i=0; i<M; i++)
    {
        cin>>x>>y>>money;
        a[x][y]=money;
        a[y][x]=a[x][y];
        printf("   0-4 Whether it is :%d 4-0:%d\n",a[0][4],a[4][0]);
    }
//printf("\n0-4 Whether it is :%d 4-0:%d\n",a[0][4],a[4][0]);
    int fsum=MAXMONEY,f=0,num=0;    // Minimum cost , At least spend the corresponding number 
    int k;
    cin>>k;
    for(int i=1; i<=k; i++)
    {
        int sum=0;//sum: The total cost 
        int b=1;   // Special mark 
        int n;
        cin>>n;

        vector<int> s;
        set<int> s2;
        int d;
        cin>>d;
        int t=d;
        s.push_back(d);
        s2.insert(d);

        // The first place is special 
        if(a[0][d])
            sum+=a[0][d];
        else
        {
            b=0;
           // continue;     //??
        }

        for(int j=1; j<n; j++)
        {
            cin>>d;
            s.push_back(d);
            s2.insert(d);
            if(a[t][d])
                sum+=a[t][d];
            else
            {
                b=0;
                continue;
            }
            t=d;  // Be careful 
        }

        // The end point is a special case 
        if(b==0)
            continue;

        if(a[0][t])
        {
            //printf(" Delete  %d:%d\n",t,a[t][0]);
            sum+=a[0][t];
        }
        else
        {

            b=0;
            continue;
        }

        if(s.size()==N&&s2.size()==N)
        {
            num++;
            //printf(" %d \n",i);
            if(fsum>sum)
            {
                fsum=sum;
                f=i;

            }
        }
    }
    //printf("\n%d\n",a[4][0]);
    // Meet the number of strategies  num
    // Cost the least ( Select the one with the lowest serial number )  Toll   f ,fsum
    cout<<num<<endl;
    cout<<f<<" "<<fsum<<endl;
    return 0;
}

Be careful :

1.continue

2.set,vector

原网站

版权声明
本文为[HBUcs2020]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202131314583844.html