您的位置:首页 > 其它

poj 1065 Wooden Sticks贪心水过

2016-07-07 10:54 295 查看
点击打开链接

<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;

}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: