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

https://ac.nowcoder.com/acm/contest/81126

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;
}
posted @ 2024-05-01 11:48  miao-jc  阅读(13)  评论(0)    收藏  举报