hdu 1160
来源:互联网 发布:网络电视机顶盒多少钱 编辑:程序博客网 时间:2024/05/17 01:01
下次做题的时候不能中途干其他的了,写着写着忘记之前写的是什么意思了,白白浪费很长时间。
对重量进行升序排序,如果重量相等则也按速度降序排序。
之后就是LIs了。
用一个二维数组dp[len][2],dp[][0]用来记录递增序列的长度,dp[][1]用来记录维持此长度的前一个坐标。
逆序打印出来就是了。
看网上其他的用的数据结构真不好想的。膜拜下。
import java.util.Arrays;import java.util.Scanner;class M implements Comparable{ public int w,s,id; public M(int w,int s,int id) { this.w=w; this.s=s; this.id=id+1; } public int compareTo(Object o) { int t=w-((M)o).w; if(t!=0)return t; return s-((M)o).s; } }public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); M m[]=new M[10001]; int len=0,max=0,id=0,k=0;; while(cin.hasNext()) { int w=cin.nextInt(); int s=cin.nextInt(); m[len]=new M(w,s,len); len++; } Arrays.sort(m,0,len); int dp[][]=new int[len][2]; for(int i=1;i<len;i++) { dp[i][0]=1; for(int j=0;j<i;j++) { if(m[j].s>m[i].s&& dp[i][0]<dp[j][0]+1) { dp[i][0]=dp[j][0]+1; dp[i][1]=j; } } max=Math.max(max, dp[i][0]); } System.out.println(max); int index[]=new int[max]; for(int i=len-1;i>=0;i--)//以下是求坐标索引 { if(dp[i][0]==max) { index[k++]=m[i].id; id=i;break; } } for(int i=0;i<max-1;i++) { index[k++]=m[dp[id][1]].id; id=dp[id][1]; } for(int i=max-1;i>=0;i--)System.out.println(index[i]); }}
- hdu 1160
- hdu 1160
- HDU 1160
- HDU 1160
- hdu 1160
- HDU 1160
- HDU 1160
- HDU 1160
- hdu 1160
- hdu 1160
- HDU-1160
- HDU 1160
- hdu 1160
- HDU 1160
- HDU 1160 动态规划
- hdu 1160 排序
- hdu 1160 dp
- (1160)HDU-类LIS
- pythonchallenge第0关
- java中的并发
- Android引入第三方jar包的方法
- 学习C++:实践者的方法
- 树状数组整理(3.RMQ问题)
- hdu 1160
- 用java Robot API 模拟实现类似按键精灵功能
- 互联网创业已死(搜应用网观察)
- BBIT工作感想(二)
- C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
- 浏览器使用quicktime插件播放rtsp实时视频流
- AES/ECB/PKCS5Padding
- 专题2-6.++,--操作符使用分析( 国嵌C语言视频)
- Dom4j错误:java.lang.NoClassDefFoundError: org/jaxen/JaxenException