• HDU 3496 Watch The Movie


    http://acm.hdu.edu.cn/showproblem.php?pid=3496

    这题是一道二维费用背包问题,刚开始的时候我把所有的都初始化为-1,只有ans[0][0]=0;

    结果就是一直在WA,我没想明白是怎么回事,我认为要满足只有恰好用完的话,那只要将所有的都设置为-1就可以了。

    后来看了别人的题解,我是略2,想的是没错。如果要恰好用完的话,是要将别的都初始化为-1。但是这个恰好是指的物品的件数恰好,

    那么就是说二维的费用中有一个费用是恰好,所以初始化-1的时候只要是对有这个要求的这一维进行初始化就可以了。

    想到了先前做树状数组也是,总是有点生搬硬套o(╯□╰)o。。。

    看到别人的代码说,循环的位置有特定的,我觉得是没特定的,只要知道自己的二维分别代表的是什么,然后将自己的二维初始化好就可以了。

    View Code
     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 const int maxn = 105;
     5 int ans[maxn*10][maxn],v[maxn],w[maxn],cv[maxn];
     6 int main()
     7 {
     8     long i,j,n,m,l,k,t,sum;
     9     cin>>t;
    10     while(t--)
    11     {
    12         cin>>n>>m>>k;
    13         for(i=0;i<n;i++)
    14         {
    15             cin>>v[i]>>w[i];
    16         }
    17         memset(ans,-1,sizeof(ans));
    18         for(j=0;j<maxn*10;j++)
    19         ans[j][0]=0;
    20         for(i=0;i<n;i++)
    21         {
    22             for(j=k;j>=v[i];j--)
    23             for(l=m;l>0;l--)
    24             if(ans[j-v[i]][l-1]!=-1 && ans[j-v[i]][l-1]+w[i]>ans[j][l])
    25                 ans[j][l]=ans[j-v[i]][l-1]+w[i];
    26         }
    27         if(ans[k][m]!=-1)    cout<<ans[k][m]<<endl;
    28         else    cout<<"0"<<endl;
    29     }
    30     return 0;
    31 }

    做到这里回去重新看下HDU 2660.

  • 相关阅读:
    堆栈的分布
    Socket网络编程(TCP/IP/端口/类)和实例
    c语言字节对齐
    理一理字节对齐的那些事
    Socket网络编程(TCP/IP/端口/类)和实例
    socket、端口、进程的关系
    SMT32 启动文件详细解说
    Chapter 1 First Sight——22
    Leetcode389
    Chapter 1 First Sight——21
  • 原文地址:https://www.cnblogs.com/yoru/p/2698748.html
Copyright © 2020-2023  润新知