大佬帮帮我 全RE
查看原帖
大佬帮帮我 全RE
1445328
sunqikai0805楼主2024/12/22 14:21
#include<bits/stdc++.h>//万能头文件 

using namespace std;//使用标准命名空间 

int n,m,maxx = -1;//定义全局变量 

struct thing{//关于布置的结构体 
	int number1_5;//用于存储划分等级 
	int monney;//用于存储分别的钱数 
	int mark;//用于存储物品的价格与重要度乘积
}a[26];

int how(int x,int y){//求物品的价格与重要度乘积的总和 
	int s = 0;
	for(int i = x;i<=y;i++){
		s+=a[i].mark;
	}
	return s;
}

int main(){
	cin.tie(0)->sync_with_stdio(0);//cin,cout优化输入输出 
	cin>>n>>m;//输入n,m 
	for(int i = 1;i<=m;i++){//遍历结构体 
		cin>>a[i].number1_5>>a[i].monney;//输入 
		a[i].mark = a[i].number1_5*a[i].monney;//求物品的价格与重要度乘积
	}
	for (int i = 0;i < n-1;i++){//降序冒泡排序  冒泡框架一 
        for (int j = 0;j < n-i-1;j++){//冒泡框架二 
            if (a[j].mark < a[j+1].mark){//冒泡灵魂,交换条件 
                swap(a[j].mark,a[j+1].mark);//冒泡的交换 
    	    }
        }
	}
	int sum;//总钱数(monney) 
	for(int i = 1;i<=m;i++){//起始位置 
		sum = 0;//初始化 
  		for(int j = i;j<=m;j++){//选取长度 
  			sum+=a[i+j].monney;//钱数累加 
  			if(sum<n) maxx = max(maxx,how(i,j));//有空间,取钱数最大值 
  			if(sum == n) cout<<how(i,j)<<'\n';return 0;//正好已满,贪心最优解,输出即可减少时间复杂度 
  			if(sum>n) break;//钱数溢出,但始终保留最大值 
		}
	}
	cout<<maxx<<'\n';//不断溢出路径,最终输出 
	return 0;//返回 0 
}
2024/12/22 14:21
加载中...