题目大意:给定一个巧克力,怎么切看题目吧我实在写不动了= =
首先每条线被切至少一次
在此基础上一条线每被切一次就多付出一份代价
故每个交叉点上用权值较大的线切权值较小的线比较优
说白了就是大的先切然后小的后切 贪心的证明我说不明白了大家意会吧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; }
BZOJ 2430 Poi2003 Chocolate 贪心
原文地址:http://blog.csdn.net/popoqqq/article/details/43927069