zoukankan      html  css  js  c++  java
  • UVa 11450

      题目大意:我们的朋友Bob要结婚了,所以要为他买一些衣服。有m的资金预算,要买c种类型的衣服(衬衫、裤子等),而每种类型的衣服有k个选择(只能做出一个选择),每个选择的衣服都有一个价格,问如何选择才能使花费控制在预算范围内并使得花费尽量大?输出最大花费。

      用dp进行解决,bool dp[i][j]用以表明在买完第i种类型的衣服后是否可能有j的资金剩余。递推至dp[c][],找出dp[c][]中最小的资金剩余。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 struct Garment
     7 {
     8     int size;
     9     int model[25];
    10 } garment[25];
    11 bool dp[25][210];
    12 
    13 int main()
    14 {
    15 #ifdef LOCAL
    16     freopen("in", "r", stdin);
    17 #endif
    18     int T;
    19     scanf("%d", &T);
    20     while (T--)
    21     {
    22         int m, c;
    23         scanf("%d%d", &m, &c);
    24         for (int i = 1; i <= c; i++)
    25         {
    26             scanf("%d", &garment[i].size);
    27             for (int j = 0; j < garment[i].size; j++)
    28                 scanf("%d", &garment[i].model[j]);
    29             sort(garment[i].model, garment[i].model+garment[i].size);
    30         }
    31         int lowest = 0;
    32         for (int i = 1; i <= c; i++)
    33             lowest += garment[i].model[0];
    34         if (lowest > m)
    35         {
    36             printf("no solution
    ");
    37             continue;
    38         }
    39         memset(dp, 0, sizeof(dp));
    40         dp[0][m] = 1;
    41         for (int i = 1; i <= c; i++)
    42         {
    43             for (int j = 0; j <= m; j++)
    44                 if (dp[i-1][j])
    45                 {
    46                     for (int p = 0; p < garment[i].size; p++)
    47                         if (j - garment[i].model[p] >= 0)
    48                             dp[i][j-garment[i].model[p]] = 1;
    49                 }
    50         }
    51         int p = 0;
    52         while (!dp[c][p])  p++;
    53         printf("%d
    ", m-p);
    54     }
    55     return 0;
    56 }
    View Code

      开始是把数据保存在garment[0...c-1]中,后来改为garment[1...c],却忘了在计算lowest时进行修改,WA了一次,以后记得修改完东西后检查一下是否对其他地方有影响,不要简单地依靠样例给的测试数据。

  • 相关阅读:
    Win10 ntoskrnl.exe蓝屏解决
    Log POST Data in Nginx
    MACOS关闭指定端口
    获取Skype用户IP地址
    禁止windows10带来的三大隐患问题
    各种语言一句话反弹shell
    2015阿里巴巴安全峰会PPT
    HTTPS反向代理嗅探
    利用arpspoof和urlsnarf 进行ARP嗅探
    收集的几个存在漏洞的程序
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3302896.html
Copyright © 2011-2022 走看看