poj 1065 wooden sticks
Posted jack_yyc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1065 wooden sticks相关的知识,希望对你有一定的参考价值。
题目大意:
一些树枝,每个树枝有长度和重量,如果下一次加工的树枝长度和重量都不小于当前树枝,那么下一次加工不消耗,反之,下一次加工消耗为1
求如何排序才能使加工完这些树枝的消耗最小,求最小消耗
思路:
dp+排序
按照长度从小到大排序,然后看在该序列下,重量有多少个不下降子序列,不下降子序列的个数就是答案。
求个数的方法,就是先求出一个最长不下降的序列,然后把他们从序列中去掉,再看剩下的序列中,去掉最长的,直到序列空了
每次去完ans++即可
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> using namespace std; int t,n,ans,maxn; struct st { int l,w; bool operator < (const st &a) const { if(l<a.l) return true; if(l==a.l&&w<a.w) return true; return false; } }a[5040]; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&a[i].l,&a[i].w); sort(a,a+n);ans=0; for(int i=0;i<n;i++) { if(a[i].w!=0) { ans++; maxn=a[i].w;a[i].w=0; for(int j=i+1;j<n;j++) { if(a[j].w==0) continue; if(a[j].w>=maxn) { maxn=a[j].w; a[j].w=0; } } } } printf("%d\n",ans); } }
poj 1609 同
以上是关于poj 1065 wooden sticks的主要内容,如果未能解决你的问题,请参考以下文章