Codeforces Round #666 (Div. 2)

题目

D. Stoned Game

image

分析

如果最大的一堆大于其余所有之和,那么先手必胜,否则根据奇偶来判断

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		sort(a+1,a+n+1);
		int sum=0;
		for(int i=1;i<=n-1;i++)
		{
			sum+=a[i];
		}
		if(sum<a[n]) cout<<"T"<<endl;
		else if((sum+a[n])%2) cout<<"T"<<endl;
		else cout<<"HL"<<endl; 
	}	
} 

CF1396C Monster Invaders

image

分析

image

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=1e6+10;
int dp[N][2];
int a[N];
signed main()
{
	int n,r1,r2,r3,d;
	cin>>n>>r1>>r2>>r3>>d;
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	memset(dp,0x3f,sizeof dp);
	dp[1][0]=r1*a[1]+r3;
	dp[1][1]=min(r1*(a[1]+1),r2);
	for(int i=2;i<=n;i++)
	{
		dp[i][0]=min({dp[i][0],dp[i-1][0]+r1*a[i]+r3+d,dp[i-1][1]+3*d+2*r1+min(r1*(a[i]+1),r2)});
		dp[i][1]=min({dp[i][1],dp[i-1][0]+d+min(r1*(a[i]+1),r2),r1+dp[i-1][1]+3*d+min(r1*(a[i]+1),r2)});
	}
	int ans=min(dp[n][0],dp[n-1][1]+d+a[n]*r1+r3+d+r1);
	printf("%lld",ans);
} 
posted @ 2021-12-31 15:46  m_rd  阅读(42)  评论(0)    收藏  举报