题解 P1209 【[USACO1.3]修理牛棚
看到这个题,立刻就想到了贪心 但如何贪,怎么有效的,直观的贪,这里面思维可深了
先列出最优解得情况(每一段连续的区间一定被覆盖)
(那不只要冰茶姬搞一搞就行了!!!!!!!!!)
但其实还有更简单的方法
让木板最有效的使用等价于让木板空的最少等价于让那些空了最多的就不铺木板
我们可以简易想到,这里一定要排序(排什么???)
当然是每一牛之间的距离(不是让木板空的最少吗?你把近的都排了,不就剩下的是距离最大的了吗???)
然后记得判重就ak了
弱弱的代码
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int m,s,c,sum=0; int cow[205]; int fa[205]; struct node{ int price; int which; }w[205]; bool cmp(int x,int y){ return x<y; } bool cmp2(node x,node y){ return x.price<y.price; } int main(){ cin>>m>>s>>c; for(int i=1;i<=c;i++){ cin>>cow[i]; } sort(cow+1,cow+1+c,cmp); for(int i=1;i<c;i++){ w[i].price=cow[i+1]-cow[i]; w[i].which=i; } sort(w+1,w+c,cmp2); for(int i=1;;i++){ if(c-i<m)break; //cout<<w[i].price<<endl; sum+=w[i].price; } cout<<sum+m<<endl; }
千万要记得