HDU 4293 Groups [DP]
2012-09-20 07:34
405 查看
又是POJ原题,这网赛是有多少原题。。一些人站队,但有的一排站了多个人,每个人告诉你他前面有多少个人,后面有多少个人,问说实话的人最多有多少个。
比赛的时候没想法,大叔过的这一题。赛后看了解题报告才发现思想原来是那么简单。p[i][j]表示说前面i个人,后面j个人这个区间说实话的最大人数,有一个人说i,j就加一,注意不能超过n-i-j,然后d[i]表示i前面区间都已经确定时说实话的最大人数。d[i]=max(d[j]+p[j][n-i])。
比赛的时候没想法,大叔过的这一题。赛后看了解题报告才发现思想原来是那么简单。p[i][j]表示说前面i个人,后面j个人这个区间说实话的最大人数,有一个人说i,j就加一,注意不能超过n-i-j,然后d[i]表示i前面区间都已经确定时说实话的最大人数。d[i]=max(d[j]+p[j][n-i])。
#include <stdio.h> #include <string.h> #include <algorithm> #define MAXN 505 int n,tu,tv,p[MAXN][MAXN], d[MAXN]; int main() { while (scanf("%d",&n) != EOF) { memset(p, 0, sizeof p); for (int i = 1; i <= n; i++) { scanf("%d%d", &tu, &tv); if (tu + tv >= n) continue; p[tu][tv] = std::min(p[tu][tv] + 1, n - tu - tv); } memset(d, 0, sizeof d); for (int i = 1; i <= n; i++) for (int j = 0; j < i; j++) d[i] = std::max(d[i], d[j] + p[j][n - i]); printf("%d\n", d ); } return 0; }
相关文章推荐
- HDU 4293Groups(DP)
- HDU - 4293 Groups (DP)
- HDU 4293 Groups(区间dp)
- HDU 4293 Groups (线性dp)
- HDU 4293 Groups【区间dp】
- HDU 4293 Groups (线性dp)
- Groups - HDU 4293 dp
- HDU 4293 Groups(12年成都网络赛-F题-DP)
- HDU 4293 Groups 区间覆盖 区间DP
- HDU 4293 Groups (dp)
- HDU 4293 Groups(dp)
- HDU 4293 Groups(区间DP)
- hdu 4293 Groups(动态规划)
- hdu 4293 2012成都赛区网络赛 dp ****
- HDU 4293 Groups
- hdu 4293 Groups
- !HDU 4293 排队分组说谎问题-dp-(不相交区间的最大个数)
- hdu 4293 Groups
- hdu 4293 区间DP
- hdu 4293 Groups