P2003 [CRCI2007-2008] PLATFORME 平板

1:思路:排序+模拟

高度从最低往上,然后每块找高度小于自己并且符合要求的一块,找到就可以直接break,即找到最优解。(每块都模拟一遍即可)

2:

另外我们模拟插入第一“底出来”,定义下限

e[0].h=0,e[0].l=-10001,e[0].r=10001;//底 

3:坑点:

  • j的左端点等于i的右端点 或 j的右端点等于i的左端点是不行的

  • i的左端点等于j的左端点 或 i的右端点等于j的右端点是可以的(!!!)

      for(int i=1;i<=n;i++){
      	for(int j=i-1;j>=0;j--){
      		if((e[i].le[j].l)||(e[i].l==e[j].l)){
      			ans+=(e[i].h-e[j].h);
      			break;
    		  } 
    	  } 
      }

    4:ACcode:

#include
using namespace std;
#define int long long 
const int N=1e2+10;
struct node{
	int l,r,h;
	bool operator <(const node& i)const{
	 return h>n;
  for(int i=1;i<=n;i++) cin>>e[i].h>>e[i].l>>e[i].r;
  e[0].h=0,e[0].l=-10001,e[0].r=10001;//底 
  sort(e+1,e+1+n);
  int ans=0;
  
  for(int i=1;i<=n;i++){
  	for(int j=i-1;j>=0;j--){
  		if((e[i].le[j].l)||(e[i].l==e[j].l)){
  			ans+=(e[i].h-e[j].h);
  			break;
		  } 
	  } 
  }
  
   for(int i=1;i<=n;i++){
  	for(int j=i-1;j>=0;j--){
  		if((e[i].r>e[j].l&&e[i].r

over~

你可能感兴趣的:(模拟)