题目大意:给定一个巧克力,怎么切看题目吧我实在写不动了= =
首先每条线被切至少一次
在此基础上一条线每被切一次就多付出一份代价
故每个交叉点上用权值较大的线切权值较小的线比较优
说白了就是大的先切然后小的后切 贪心的证明我说不明白了大家意会吧QAQ
一天之内写了整整十道题也是够受的了QAQ
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 10100
using namespace std;
int n,m,ans;
int a[M],b[M];
int sum_a[M],sum_b[M];
int main()
{
int i;
cin>>n>>m;
--n;--m;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ans+=a[i];
}
for(i=1;i<=m;i++)
{
scanf("%d",&b[i]);
ans+=b[i];
}
sort(a+1,a+n+1);
sort(b+1,b+m+1);
for(i=1;i<=n;i++)
sum_a[i]=sum_a[i-1]+a[i];
for(i=1;i<=m;i++)
sum_b[i]=sum_b[i-1]+b[i];
int l1=1,l2=1;
for(i=1;i<=m+n;i++)
{
if( l2>m || l1<=n && a[l1]<b[l2] )
ans+=sum_b[l2-1],l1++;
else
ans+=sum_a[l1-1],l2++;
}
cout<<ans<<endl;
return 0;
}