HDU 1160 动态规划
2013-04-01 19:38
211 查看
/*
动态规划的第三题了;一个小小细节,想了一天了,对比别人代码终于发现了;
*/
动态规划的第三题了;一个小小细节,想了一天了,对比别人代码终于发现了;
*/
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <iomanip> using namespace std; struct mouse { int w; int v; int num; }mice[1005]; int dp[1005],fa[1005],father[1005],flag = 1; int cmp(mouse m1,mouse m2) { if(m1.w==m2.w)return m1.v>m2.v; return (m1.w<m2.w)?1:0; } void set(int *fa, int k) { if(k==0) return ; father[flag++] = k; set(fa,fa[k]); } int main(int argc, char *argv[]) { int n = 0; while(scanf("%d%d",&mice .w,&mice .v)!=EOF) { mice .num = n+1; ++n; } sort(mice,mice+n,cmp); memset(dp,0,sizeof(dp)); dp[0] = 1; int k = 0,ans = 1; for(int i = 1; i < n; i++) { dp[i] = 1; for(int j = 0; j < i; j++) { if(mice[j].w<mice[i].w&&mice[j].v>mice[i].v&&dp[j]+1>dp[i]) { fa[mice[i].num] = mice[j].num; dp[i] = dp[j]+1; } } if(ans<dp[i]) { ans = dp[i]; k = mice[i].num; } } printf("%d\n",ans); set(fa,k);//顺序存储 for(int i = ans; i >= 1; i--)//倒序输出 { printf("%d",father[i]); if(i!=1) printf("\n"); } return 0; }
相关文章推荐
- HDU 1160 FatMouse's Speed 动态规划
- HDU--1160 -- FatMouse's Speed [动态规划+排序]
- hdu 1160 FatMouse's Speed(动态规划)
- HDU 1160 动态规划
- HDU 1160 FatMouse's Speed(动态规划)
- HDU 1160 FatMouse's Speed 动态规划
- HDU 1160 FatMouse's Speed 动态规划
- HDU 1160 FatMouse's Speed(最长上升子序列长度及其路径)
- HDU_1231 最大连续子序列 【动态规划】
- HDU 2571 命运 DP 动态规划
- HDU 2859 Phalanx(动态规划)
- hdu 4571 Travel in time ( 图论+动态规划 )
- [动态规划] hdu 3602-2012 和 USACO Section 3.4 Rockers
- hdu 3853 LOOPS 动态规划
- hdu 5492 Find a path 动态规划
- HDU 5904 LCIS (动态规划) -- 解题报告
- HDU 1133(卡特兰数;动态规划)
- HDU 3535 AreYouBusy 题解(动态规划)
- hdu 1505 动态规划
- HDU 1087 Super Jumping! Jumping! Jumping! 动态规划