730J:Bottles
簡述題意
現在有
問把所有的水轉移到儘量少的瓶子,至少需要幾個瓶子。
在滿足上問的情況下,最少徐璈轉移多少單位的水。
數據範圍
思路
狀態轉移方程
狀態轉移方程:
空間是
統計答案隨便搞一搞就行了。
最終時間複雜度
還是比較水的= =
代碼
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,need,sum,ans;
int f[110][10010],a[110],b[110];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
need+=a[i];
}
for (int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
sum+=b[i];
}
memset(f,0xff,sizeof(f));
f[0][0]=0;
for (int i=1;i<=n;i++)
for (int j=n;j>=1;j--)
for (int k=sum;k>=b[i];k--)
if (f[j-1][k-b[i]]!=-1)
f[j][k]=max(f[j][k],f[j-1][k-b[i]]+a[i]);
ans=-1;
for (int j=1;j<=n;j++)
{
for (int k=need;k<=sum;k++)
ans=max(ans,f[j][k]);
if (ans!=-1)
{
printf("%d %d",j,need-ans);
break;
}
}
return 0;
}