牛客小白月赛92——D&E&

牛客小白月赛92_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

D

:数学问题简化复杂度
整理成一个关于位置x的一元二次函数,计算系数后,从1到n逐一尝试,时间复杂度O(n)

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
priority_queue<int,vector<int>,greater<int>>qmi;//大根堆
priority_queue<int>qma;//小根堆
const int mod = 1e09+7;
int gcd(int a,int b)
{
	return b>0?gcd(b,a%b):a;
}
int lcm(int a,int b)
{
	return a/gcd(a,b)*b;
}
bool cmp(char a,char b)
{
	return a>b;
}
void solve(){
	int n;
	cin>>n;
	vector<int>a(n+1);
	int sum1=0,sum2=0,sum0=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum0+=a[i];
		sum1+=i*a[i];
		sum2+=i*i*a[i];
	}
	int min1=inf;
	for(int x=1;x<=n;x++)
	{
		int sum=x*x*sum0-2*x*sum1+sum2;
		min1=min(sum,min1);
	}
	cout<<min1<<endl;
}
signed main() {
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	int t=1;
//	cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}

E

:dp动态规划

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
//#define inf 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define pii pair<int,int>
priority_queue<int,vector<int>,greater<int>>qmi;//大根堆
priority_queue<int>qma;//小根堆
const int mod = 1e09+7;
int gcd(int a,int b)
{
	return b>0?gcd(b,a%b):a;
}
int lcm(int a,int b)
{
	return a/gcd(a,b)*b;
}
bool cmp(char a,char b)
{
	return a>b;
}
struct mei{
	int x,y;
};
int f[1000006][2];
/*
  本题的f[i][j]表示融化i单位的铁矿石,是否已经使用了暗物质(j=0表示没有使用,j=1表示已经或者本次使用)        
  1.01背包的思路,再一维优化的基础上i,二维上就是是否使用暗物质j
  2.本题有一个坑,至多融化x单位的铁矿石,所以j要从m遍历到0,然后对f[i][max(0ll,j-v[i])]取一个max,  
 */
void solve(){
	int n,m;
	cin>>n>>m;//煤炭,铁矿石
	vector<mei>a(n+1);
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
	}
	memset(f,inf,sizeof(f));//融化i单位的铁矿石最少使用的时间。
	f[0][0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=0;j--)
		{
			//由于至多x单位的铁矿石,所以a[i].x可能大于m,这也是合法的答案,可以计入f[0][0gtt]
			//还没有使用暗物质所以f[j][0],就正常转移
			f[j][0]=min(f[j][0],f[max(0ll,j-a[i].x)][0]+a[i].y);
			//已经使用过暗物质了所以f[j][1]
			f[j][1]=min(f[j][1],f[max(0ll,j-a[i].x)][1]+a[i].y);
			//还没有使用过暗物质,对于第i个煤炭使用暗物质
			f[j][1]=min(f[j][1],f[max(0ll,j-2*a[i].x)][0]+a[i].y/2);
		}
	}
	cout<<min(f[m][0],f[m][1])<<endl;
}
signed main() {
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	int t=1;
//	cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值