P1284 三角形牧场(背包)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1284 三角形牧场(背包)相关的知识,希望对你有一定的参考价值。

P1284 三角形牧场(背包)

f ( i , j ) f(i,j) f(i,j)第一条边长度为 i i i,第二条边长度为 j j j 是否成立。

这里类似01背包省略了第一维,所以枚举 i , j i,j i,j的时候就逆序,然后就类似01背包转移一下,至于求三角形面积,用下海伦公式即可。

时间复杂度: O ( n m 2 ) O(nm^2) O(nm2)

// Problem: P1284 三角形牧场
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1284
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Date: 2022-02-02 16:40:45
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=805,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define ios ios::sync_with_stdio(false),cin.tie(nullptr) 
void Print(int *a,int n)
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\\n",a[n]); 

template <typename T>		//x=max(x,y)  x=min(x,y)
void cmx(T &x,T y)
	if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
	if(x>y) x=y;

int n;
bool f[N][N];
int a[45],sum;
double solve(db a,db b,db c)
	db p = (a+b+c)/2;
	return sqrt(p*(p-a)*(p-b)*(p-c));

bool ck(int a,int b,int c)
	return (a+b>c &&a+c>b && b+c>a);

int main()
	scanf("%d",&n);
	rep(i,1,n)
		scanf("%d",&a[i]);sum+=a[i];
	
	f[0][0] = true;
	rep(k,1,n)
		for(int i=sum>>1;~i;i--)
			for(int j=sum>>1;~j;j--)
				if(i-a[k]>=0) f[i][j]|=f[i-a[k]][j];
				if(j-a[k]>=0) f[i][j]|=f[i][j-a[k]];			
			
	
	db ans = -1;
	for(int i=sum>>1;i;i--)
		for(int j=sum>>1;j;j--)
			if(!f[i][j] || !ck(i,j,sum-i-j)) continue;
			cmx(ans,solve(i,j,sum-i-j));
			
	if(ans<0) printf("-1");
	else 
		printf("%d\\n",(ll)(ans*100LL));
	
	return 0;


以上是关于P1284 三角形牧场(背包)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1284 三角形牧场WD

P1284 三角形牧场

P1284 三角形牧场

洛谷P1284 三角形牧场

洛谷 P1284 三角形牧场

luogu P1284 三角形牧场