NYOJ心急的C小加——贪心
这个题会联想到拦截导弹的题目http://codevs.cn/problem/1044/
首先用动态规划,利用Dilworth定理解题,然而超时了(╥╯^╰╥)
关于Dilworth定理,我的理解:
389 207 155 300 299 170 158 65
最长不上升子序列(389 300 299 170 158 65)“最多能拦截6个导弹”;
最长上升子序列,即最少的链划分数为2,“要拦截所有导弹需要2套系统”。
//2016.2.24
//心急的C小加
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std; const int maxn=+;
int dp[maxn];
int n,cnt; struct Wood{
int length;
int weight;
Wood(int l=,int w=):length(l),weight(w){}
}wood[maxn]; //按质量大小排序,质量相同的按长度排序
bool cmp(const Wood &a,const Wood &b){
if(a.weight==b.weight){
return a.length<=b.length;
}else{
return a.weight<=b.weight;
}
} //Dilworth定理,求最长非上升子序列---------超时
void solve(){
cnt=;
for(int i=;i<n;i++){
dp[i]=;
for(int j=;j<i;j++){
if(wood[j].length>wood[i].length){
dp[i]=max(dp[i],dp[j]+);
}
}
cnt=max(cnt,dp[i]);
}
cout<<cnt<<endl;
} int main(){
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=;i<n;i++){
cin>>wood[i].length>>wood[i].weight;
}
sort(wood,wood+n,cmp);
solve();
}
return ;
}
下面是AC代码:
//2014.2.25
//心急的C小加
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std; const int maxn=+;
int n; struct Wood{
int length;
int weight;
int isVisit; //增加一个标记位
Wood(int l=,int w=,int v=):length(l),weight(w),isVisit(v){}
}wood[maxn]; //按质量大小排序,质量相同的按长度排序
bool cmp(const Wood &a,const Wood &b){
if(a.weight==b.weight){
return a.length<=b.length;
}else{
return a.weight<=b.weight;
}
} void solve(){
int tmp,cnt=;
for(int i=;i<n;i++){
if(wood[i].isVisit==){
cnt++;
tmp=wood[i].length;
for(int j=i+;j<n;j++){
if(wood[j].isVisit==&&wood[j].length>=tmp){
tmp=wood[j].length;
wood[j].isVisit=; //如果满足增序就标志为1
}
}
}
}
cout<<cnt<<endl;
} int main(){
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=;i<n;i++){
cin>>wood[i].length>>wood[i].weight;
wood[i].isVisit=; //初始化很容易忘记!
}
sort(wood,wood+n,cmp);
solve();
}
return ;
}
NYOJ心急的C小加——贪心的更多相关文章
- 心急的C小加 贪心算法
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...
- nyoj 236 心急的C小加
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...
- ACM 心急的C小加
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...
- 心急的C小加(两种解法)
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...
- ny236 心急的C小加 hdoj1051 Wooden Sticks
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...
- 心急的C小加
描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果 第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则 ...
- 问题 G: 心急的C小加
题目描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否 ...
- nyoj 236心急的C小加 动态规划( java)
sort函数用法: #include<algorithm> using namespace std; sort(a,a+len;cmp) //a-->数组名, len-- ...
- nyoj--236--心急的C小加(动态规划&&LIS)
心急的C小加 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...
随机推荐
- rabbitmq和kafka的区别
1.吞吐量kafka吞吐量更高: 1)Zero Copy机制,内核copy数据直接copy到网络设备,不必经过内核到用户再到内核的copy,减小了copy次数和上下文切换次数,大大提高了效率. 2)磁 ...
- Java设计模式之JDK动态代理原理
动态代理核心源码实现public Object getProxy() { //jdk 动态代理的使用方式 return Proxy.newProxyInstance( this.getClass(). ...
- BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规 则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n ...
- RF学习使用记录【4】
四 Extending Robot Framework 4.1 Creating test libraries RF的测试能力由测试库支持决定,已经有许多的测试库,有一些随着RF框架安装,但是更多的需 ...
- python第十二周:SQL alchemy、pymysql
python操作MySQL mysqldb python3之后的版本就不支持mysqldb了,故在此略过 pymysql #执行SQL语句 # -*- coding:utf-8 -*- #!/user ...
- 阿里云 全部端口port
- web开发如何使用高德地图API(二)结合输入提示和POI搜索插件
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- caffe中的前向传播和反向传播
caffe中的网络结构是一层连着一层的,在相邻的两层中,可以认为前一层的输出就是后一层的输入,可以等效成如下的模型 可以认为输出top中的每个元素都是输出bottom中所有元素的函数.如果两个神经元之 ...
- rsync与cwRsync
以下这个链接是windows之间的csRsync和csRsyncServer同步教程: http://www.cnblogs.com/wwufengg/p/rsync-config.html !Att ...
- hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积
题目链接:点击打开链接 题目描写叙述:给定一些矩形,求这些矩形的总面积.假设有重叠.仅仅算一次 解题思路:扫描线+线段树+离散(代码从上往下扫描) 代码: #include<cstdio> ...