P5753 瓷片项链 题解

题目分析

  • 很容易发现只要烧制所有瓷片的损耗小于总量,就能烧制成项链。

  • 不妨设烧制了 \(n\) 片,则总长度为 \(n\times 0.3\sqrt{v-v0}\)

  • 本题数据范围较小,\(n\) 的大小不会超过 \(60000\),因此可用枚举法解决。

  • 接下来只需要枚举 \(n\) 的大小,比较项链总长度选出最大值就可以了。

  • 需要注意特判最优解不唯一和 \(v<v0\) 的情况,直接输出 \(0\)

代码实现

#include<bits/stdc++.h>//万能头
using namespace std;
int main() {
	int vz,v0;//总量与损耗
	int ans;
	double l,maxl=0,li;
	cin>>vz>>v0;
	if(vz<v0){
		cout<<0;
		return 0;//判定总量小于损耗的情况 
	}
	for(int i=1;vz>v0*i;i++){//枚举烧制的陶片个数 
		li=i;
		l=0.3*sqrt(vz/li-v0);//计算n=i时项链的长度 
		 
		if(maxl==l*li) {
			cout<<0;
			return 0;//判定最优解不唯一的情况 
		}
		else if(maxl<l*li){
		maxl=l*li;//更新答案 
		ans=i;
		}
	}
	cout<<ans;
	return 0;//完结撒花 
}
posted @ 2022-08-22 18:26  狐适之  阅读(61)  评论(0)    收藏  举报