• WA:ZOJ 1025 Wooden Sticks


    思路是:先对长乘以重量进行排序,除去完全相同的(l,w分别相等),然后依次计算dp(i),最后统计f[i] == 1的个数。

    为什么这样考虑呢?看图:

    为什么这样不对呢?看图:

    这就说明了统计1的个数的想法是错误的。

    看了网上的代码,都说是贪心。

    谁说WA的代码就没用?
     1 # include <stdio.h>
    2 # include <memory.h>
    3 # include <stdlib.h>
    4
    5 typedef struct {
    6 int l, w;
    7 }stick;
    8
    9 int T, n;
    10 int mask[5002];
    11 int f[5002];
    12 stick s[5002];
    13
    14 int dp(int i);
    15
    16 int scmp(const void *xx, const void *yy)
    17 {
    18 return (*(stick*)xx).l*(*(stick*)xx).w < (*(stick*)yy).l*(*(stick*)yy).w ? -1:1;
    19 }
    20
    21 int main()
    22 {
    23 int i, ans;
    24
    25 scanf("%d", &T);
    26 while (T--)
    27 {
    28 scanf("%d", &n);
    29 for ( i = 1; i <= n; ++i)
    30 scanf("%d%d", &s[i].l, &s[i].w);
    31
    32 qsort(s+1, n, sizeof(stick), scmp);
    33
    34 memset(mask, 0, sizeof(mask));
    35 for ( i = 1; i < n; ++i)
    36 while (i < n && s[i+1].l == s[i].l && s[i+1].w == s[i].w)
    37 {
    38 mask[i] = 1;
    39 ++i;
    40 }
    41
    42 ans = 0;
    43 memset(f, 0, sizeof(f));
    44 for ( i = 1; i <= n; ++i)
    45 {
    46 if (!mask[i] && !f[i]) dp(i);
    47 if (f[i] == 1) ++ans;
    48 }
    49
    50 printf("%d\n", ans);
    51 }
    52
    53 return 0;
    54 }
    55
    56 int dp(int i)
    57 {
    58 int k, tmp, ti;
    59 if (f[i]) return f[i];
    60
    61 f[i] = 1;
    62 for ( k = i+1; k <= n; ++k)
    63 if (!mask[k] && s[i].l<=s[k].l && s[i].w<=s[k].w && f[i]<(tmp = dp(k)+1))
    64 f[i] = tmp;
    65
    66 return f[i];
    67 }



  • 相关阅读:
    攻防世界-web进阶-Web_php_include
    攻防世界-web进阶-php_rce
    Buuctf-misc-穿越时空的思念
    Buuctf-misc-[BJDCTF 2nd]EasyBaBa (kinovea)
    Buuctf-misc-菜刀666
    Buuctf-misc-[BJDCTF 2nd]圣火昭昭-y1ng(outguess)
    Access数据库简介
    VC与VB
    VB的使用
    工作总结2
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2435793.html
Copyright © 2020-2023  润新知