栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

11111

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

11111

//最小生成树
#include
using namespace std;
int cmp(Evode a,Evode b){
    return a.lowcost%cn",Edge[i].Head,Edge[i].Tail);
        }
    }
}

//快速排序 
#include 
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
	int i, j, t, temp;
	if(left > right)
		return;
    temp = a[left]; //temp中存的就是基准数
    i = left;
    j = right;
    while(i != j) { //顺序很重要,要先从右边开始找
    	while(a[j] >= temp && i < j)
    		j--;
    	while(a[i] <= temp && i < j)//再找左边的
    		i++;       
    	if(i < j)//交换两个数在数组中的位置
    	{
    		t = a[i];
    		a[i] = a[j];
    		a[j] = t;
    	}
    }
    //最终将基准数归位
    a[left] = a[i];
    a[i] = temp;
    quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程
    quicksort(i+1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {
	int i;
    //读入数据
	scanf("%d", &n);
	for(i = 1; i <= n; i++)
		scanf("%d", &a[i]);
    quicksort(1, n); //快速排序调用
    //输出排序后的结果
    for(i = 1; i < n; i++)
    	printf("%d ", a[i]);
    printf("%dn", a[n]);
    return 0;
}

// 棋盘覆盖问题
#include 
#include
#include
#include
using namespace std;
int title =1;
int a[101][101];
//tr,tc表示棋盘的起始位置(第tr行,第tc列)
//dr,dc表示特殊格子所在位置(第dr行,第dc列),4*4的棋盘tr,tc取值范围为0,1,2,3
//size表示棋盘大小,4*4的棋盘size为4
void ChessBoard(int tr,int tc,int dr,int dc,int size)
{
    if(size==1)  return;
    int s = size/2;
    int t = title++;
    if(dr=tc+s){//右上
        ChessBoard(tr,tc+s,dr,dc,s);
    }else{
        a[tr+s-1][tc+s] = t;
        ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
    }
    if(dr>=tr+s&&dc=tr+s&&dc>=tc+s){//右下
        ChessBoard(tr+s,tc+s,dr,dc,s);
    }else{
        a[tr+s][tc+s] = t;
        ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
    }
}
int main()
{
    int size;
    scanf("%d",&size);
    for(int i=0;i>x>>y;
    ChessBoard(0,0,x,y,size);
    for(int i=0;i
#include
#include 
#include 

using namespace std;

struct movie {
	int start, end;
};

int cmp(movie a, movie b) {
	return a.end < b.end;
}

int main() {
	int n;
		cin >> n;
		vector arr(n);
		for (int i = 0; i < n; i++) {
			cin >> arr[i].start >> arr[i].end;//输入开始时间和结束时间
		}
		sort(arr.begin(), arr.end(), cmp);//按结束时间从小到大排序
		int end = arr[0].end;//取第一个活动的结束时间
		int sum = 1;//第一个活动一定能放完
		for (int i = 1; i < n; i++) {
			if (arr[i].start < end) {
				continue;//开始时间小于上个活动结束时间的活动不符合要求,跳过
			}
			end = arr[i].end;//更新结束时间
			sum++;
		}
		cout << sum << endl;
	
	return 0;
}

//最小生成树-kruskal
#include
#include
#include
using namespace std;
struct Edge
{
    int x,y,z;
}a[1000010]; //存储x,y,z的信息
bool cmp(const Edge &a,const Edge &b)//比较大小
{
        return a.z
#include
using namespace std;
int main(){
	string a,b;
	cin>>a>>b;
	int len1=a.size();
	int len2=b.size();
	int dp[len1+1][len2+1];
	memset(dp,0,sizeof(dp));
	for(int i=0;i
#include
#include
using namespace std;
#define MaxVertexNum 100
#define INF 9998
typedef struct
{
    char vertex[MaxVertexNum];
    int edges[MaxVertexNum][MaxVertexNum];
    int n,e;
} MGraph;
void CreateMGraph(MGraph &G,int a[][2])
{
    int i,j,k,p;
    cin>>G.n>>G.e;
    for(i=0; i>i>>j>>p;
        G.edges[i][j]=p;
    }
    for(int i=1; i<=2; i++)
        for(int j=1; j<=2; j++)
            cin>>a[i][j];
}

void Ppath(int path[][MaxVertexNum],int i,int j)
{
    int k;
    k=path[i][j];
    if(k==-1)
        return;
    Ppath(path,i,k);
    printf("%d->",k);
    Ppath(path,k,j);
}
void Dispath(int A[][MaxVertexNum],int path[][MaxVertexNum],int n,int a[][2])
{
    int i;
    for(i=1; i<=2; i++)
    {
        int j=1;
        int m=a[i][j];
        int n=a[i][j+1];
        if(A[m][n]==INF)
        {
            if(m!=n)
                printf("%d->%d:-1n",m,n);
        }
        else
        {
            printf("%d->",m);
            Ppath(path,m,n);
            printf("%d:%dn",n,A[m][n]);
        }
    }
}
void bijiao(int A[][MaxVertexNum],MGraph G,int path[][MaxVertexNum])
{
    int max = A[0][0];
    int x=0,y=0;
    for (int i = 0; i < G.n; i++)
        for (int j = 0; j < G.n; j++)
            if (A[i][j]>max&&A[i][j]!=INF)
            {
                max = A[i][j];
                x=i;
                y=j;
            }
    printf("%d->",x);
    Ppath(path,x,y);
    printf("%d:%d",y,A[x][y]);
}

void Floyd(MGraph G,int a[][2])
{
    int i,j,k;
    int A[MaxVertexNum][MaxVertexNum];
    int path[MaxVertexNum][MaxVertexNum];
    for(i=0; iA[i][k]+A[k][j])
                {
                    A[i][j]=A[i][k]+A[k][j];
                    path[i][j]=k;
                }
    Dispath(A,path,G.n,a);
    bijiao(A,G,path);
}
int main()
{
    MGraph G;
    int a[2][2];
    CreateMGraph(G,a);
    Floyd(G,a);
    return 0;
}

//图着色问题 
#include
#include
#include
#include
using namespace std;
int main()
{
    int v,e,k;
    cin>>v>>e>>k;
    int v1,v2;
    vectorvec[v];
    for(int i=0; i>v1>>v2;
        vec[v1-1].push_back(v2-1);
        vec[v2-1].push_back(v1-1);
    }
    int t;
    cin>>t;
    while(t--)
    {
        bool flag=true;
        sets;
        int color[v];
        for(int i=0; i>color[i];
            s.insert(color[i]);
        }
        int len=s.size();
        if(len!=k)
        {
            cout<<"No"<::iterator it;
        for(int i=0; i
using namespace std;

int dp[200][200];//前i个物品装入容量为j的背包中获得的最大价值

//0-1背包动态规划算法   构造二维表
int KnapSack(int n, int w[], int v[], int x[], int C) {
	int i, j;

	for (i = 0; i <= n; i++) { // 初始化:背包容量为0时,前i个物品无法装入,获得最大价值为0
		dp[i][0] = 0;

	}
	for (j = 0; j <= C; j++) {	//初始化:物品数量为0时,背包容量j无论多大,获得最大价值为0
		dp[0][j] = 0;
	}
	for (i = 0;i <= n;i++) {
		if (w[i] > C) {
			dp[i][0] = 0;
		}
	}
	for (i = 1; i <= n; i++) {    //构造二维表:行对应前i个物品;列对应背包容量j
		for (j = 1; j <= C; j++) {
			if (j < w[i]) {		//背包容量不够第i个物品的重量大
				dp[i][j] = dp[i - 1][j]; //不装,获得的最大价值仍然等于前i-1个物品装入情况的
			}
			else {				//装,看看是装入后获得的最大价值大还是前i-1个物品装入情况的最大价值大,比较后选择最大的
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
				
			}
		}
	}
	j = C; //j等于背包的最大容量C
	for (i = n; i > 0; i--) {   //从后往前遍历,如果装了第i个物品则标志位x[i]=1
		if (dp[i][j] > dp[i - 1][j]) { //判断第i个物品有没有装进去
			x[i] = 1;		//第i个物品装了进去
			j = j - w[i];	//装了进去就将该物品的重量减去,j为剩余容量
		}
		else {
			x[i] = 0;   //第i个物品没装进去
		}
	}
	for (i = 1; i <= n; i++) {
		if (x[i]==1) {
			cout << i;
			cout << " ";
		}
		
	}	if (dp[n][C] == 0) {
		cout << "No";
		return dp[n][C] = 0;
	}else
		return dp[n][C];
}
int main() {
	int w[100];	//物品的重量
	int v[100];	//物品的价值
	int x[100];	//物品的选取状态
	int i, n, C;
	cin >> n>>C;//物品总数+背包总容量
	for (i = 1; i <= n; i++) {
		cin >> w[i]>>v[i];
	}
	int maxValue = KnapSack(n, w, v, x, C);
	cout << endl;
	cout <<  maxValue << endl;
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号