一直UKE是咋回事
  • 板块CF730J Bottles
  • 楼主zheysq_147
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/8/25 16:52
  • 上次更新2023/11/4 09:03:45
查看原帖
一直UKE是咋回事
239761
zheysq_147楼主2021/8/25 16:52
#include<bits/stdc++.h>
using namespace std;
#define N 105
struct node
{
	int a,b;
}e[N];
int f[N][N];
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		    f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
bool cmp(node a1,node a2)
{
	return a1.b>a2.b;
}
void solve()
{
	int n=read(),sum=0,res=0,ans=0,r;
	for(int i=1;i<=n;++i)
	{
	    e[i].a=read();
	    sum+=e[i].a;
	}
	for(int i=1;i<=n;++i)
	    e[i].b=read();
	sort(e+1,e+1+n,cmp);
	for(int i=1;i<=n;++i)
	{
		res+=e[i].b;
		if(res>=sum)
		{
			r=i;
			printf("%d ",r);
			break;
		}
	}
	for(int i=1;i<=n;++i)
	    for(int j=r;j>=1;--j)
	        for(int k=res;k>=e[i].b;--k)
	            f[j][k]=max(f[j][k],f[j-1][k-e[i].b]+e[i].a);
	for(int i=sum;i<=res;++i)
	    ans=max(ans,f[r][i]);
	printf("%d\n",sum-ans);
}
int main()
{
	int tests=1;
	for(int i=1;i<=tests;++i)
	    solve();
	return 0;
}
2021/8/25 16:52
加载中...