zoukankan      html  css  js  c++  java
  • BZOJ1775: [Usaco2009 Dec]Vidgame 电视游戏问题

    n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益。

    这就是一个背包!不过有依存关系,就不会了!

    方法一:f[i][j]表示游戏机i用j块钱能得多少收益,这是可以预处理的,而g[i][j]表示前i个游戏机用j块钱最大收益,

    果断tle,究其原因在于g[i][j]的转移,本来一个游戏机没几款游戏,转移10次就够了,被我搞成钱,搞了那么多次。

    方法二:与上相同,但k和f[i][k]改成那十个游戏数的值。没了。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 //#include<iostream>
     6 using namespace std;
     7  
     8 int n,m;
     9 #define maxn 100011
    10 struct Start{int v,cnt;}p[maxn];
    11 int v[55][23],w[55][23];
    12 int f[2][maxn],cur;
    13 int main()
    14 {
    15     scanf("%d%d",&n,&m);
    16     for (int i=1;i<=n;i++)
    17     {
    18         scanf("%d%d",&p[i].v,&p[i].cnt);
    19         for (int j=1;j<=p[i].cnt;j++) scanf("%d%d",&w[i][j],&v[i][j]);
    20     }
    21     cur=0;memset(f,0,sizeof(f));
    22     for (int i=1;i<=n;i++)
    23     {
    24         cur^=1;
    25         for (int j=0;j<p[i].v;j++) f[cur][j]=0;
    26         for (int j=p[i].v;j<=m;j++) f[cur][j]=f[cur^1][j-p[i].v];
    27         for (int j=1;j<=p[i].cnt;j++)
    28             for (int k=m;k>=p[i].v+w[i][j];k--)
    29                 f[cur][k]=max(f[cur][k],f[cur][k-w[i][j]]+v[i][j]);
    30         for (int j=0;j<=m;j++) f[cur][j]=max(f[cur^1][j],f[cur][j]);
    31     }
    32     printf("%d
    ",f[cur][m]);
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    Mapbox GL JS使用小结(一)
    js 跳转链接的几种方式
    使用iis 部署 .net项目遇到的问题
    ROS 导入示例程序并建立工程运行
    C# WPF程序增加终端串口打印调试信息
    C# 继承方法重写调用测试
    C# 迭代器实现
    C# 引用和值都按照引用传递(其实传递的就是指针)
    C# string引用类型参数不变性
    C# 值类型和引用类型
  • 原文地址:https://www.cnblogs.com/Blue233333/p/7489560.html
Copyright © 2011-2022 走看看