poj 1065 Wooden Sticks贪心水过

来源:互联网 发布:mac 终端显示路径 编辑:程序博客网 时间:2024/05/04 11:10

点击打开链接

<pre class="cpp" name="code">#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int M =5100; struct Node{int L;int W;bool operator <(const Node t)const{if(L==t.L)return W>t.W;return L>t.L;}}node[M];int main(){int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++){cin>>node[i].L>>node[i].W;} sort(node+1,node+n+1); //按长度大到小 排好后 关于W的LIS变形 类型 hdu 1275拦截导弹 int ans,num,p[M];//当前最大的保存W的值即可p[i] 是递减的 num=1;p[num]=node[num].W;for(int i=2;i<=n;i++){int flag=0;for(int j=1;j<=num;j++) // 贪心 : 对于 a,b  a<b 并且 x<a,&&x<b   x应该在a之后 {// 反证 当x跟在b之后   若存在 y>x&&y>a&&y<b  因为y>x&&y>a 则需要setup num数量增加  //说明 x在a之后 Min可能会减小 //    若存在 y>x&&y<a&&y<b 也不会丢失最优解if(p[j]>=node[i].W){p[j]=node[i].W;flag=1;break;} }if(!flag) // 重新开一个 {num++;p[num]=node[i].W;}}cout<<num<<endl;}return 0;}


0 0