HUST 1354 Rubiks
背包。注释写详细了。
本想这样写:每个组内各自做背包,然后组间做背包,但是由于这题M=10000,时间复杂度太大。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<functional>
using namespace std; const int maxn = + ;
int n, m, g; vector<int>G[]; int cost[ + ];
int val[ + ];
int y[];
bool flag[ + ];
int dp1[ + ];
int dp2[ + ]; void init()
{
memset(flag, , sizeof flag);
for (int i = ; i <= g; i++) G[i].clear();
} int main()
{
while (~scanf("%d%d", &n, &m)){ for (int i = ; i <= n; i++) scanf("%d", &cost[i]);
for (int i = ; i <= n; i++) scanf("%d", &val[i]);
scanf("%d", &g);
init();
for (int i = ; i <= g; i++)
{
int f;
scanf("%d", &f);
for (int j = ; j <= f; j++)
{
int id;
scanf("%d", &id);
G[i].push_back(id);
flag[id] = ;
}
scanf("%d", &y[i]);
} memset(dp1, , sizeof dp1); //没有组的归为一组
for (int i = ; i <= n; i++)
{
if (flag[i]) continue;
for (int j = m; j >= cost[i]; j--)
dp1[j] = max(dp1[j], dp1[j - cost[i]] + val[i]);
} for (int k = ; k <= g; k++)
{
//此时dp2数组存储了之前的所有组合最优解
for (int i = ; i <= m; i++) dp2[i] = dp1[i]; //接下来假设不买完这个组合内的魔方,这样DP的话事实上也存在买完的组合,但会被之后的dp2更新,所以不存在问题
for (int s = ; s < G[k].size(); s++)
{
for (int j = m; j >= cost[G[k][s]]; j--)
{
dp1[j] = max(dp1[j], dp1[j - cost[G[k][s]]] + val[G[k][s]]);
}
} //假设买完,用dp2更新
int sum_cost = , sum_val = y[k];
for (int s = ; s < G[k].size(); s++)
{
sum_cost = sum_cost + cost[G[k][s]];
sum_val = sum_val + val[G[k][s]];
} for (int j = m; j >= sum_cost; j--)
{
dp2[j] = max(dp2[j], dp2[j - sum_cost] + sum_val);
} //然后dp1和dp2存下最大值
for (int i = ; i <= m; i++) dp1[i] = max(dp1[i], dp2[i]);
} printf("%d\n", dp1[m]);
}
return ;
}
HUST 1354 Rubiks的更多相关文章
- HUST 1354 - Rubiks (DP)
1354 - Rubiks 时间限制:1秒 内存限制:64兆 452 次提交 102 次通过 题目描述 Isun is a genius. Not only he is an expert in al ...
- HUST 1017 - Exact cover (Dancing Links 模板题)
1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 5584 次提交 2975 次通过 题目描述 There is an N*M matrix with only 0 ...
- ubuntu 16.04 source (HUST and 163)
#HUST deb http://mirrors.hust.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://m ...
- Dancing Link --- 模板题 HUST 1017 - Exact cover
1017 - Exact cover Problem's Link: http://acm.hust.edu.cn/problem/show/1017 Mean: 给定一个由0-1组成的矩阵,是否 ...
- hust 1010 最短循环节点
题目链接:http://acm.hust.edu.cn/problem/show/1010 KMP失配指针的利用: next数组前缀和后缀最长公共长度,这样len - next[len];就是最短的循 ...
- light oj 1354 - IP Checking
1354 - IP Checking PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB An I ...
- 1354 - IP Checking(水题)
1354 - IP Checking PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB An I ...
- HUST 1017(DLX)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=65998#problem/A 题意:求01矩阵的精确覆盖. DLX学习资料:ht ...
- [ACM] HUST 1017 Exact cover (Dancing Links,DLX模板题)
DESCRIPTION There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
随机推荐
- POJ 2234 Matches Game 尼姆博弈
题目大意:尼姆博弈,判断是否先手必胜. 题目思路: 尼姆博弈:有n堆各a[]个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 获胜规则:ans=(a[1]^a[ ...
- PID控制学习笔记(二)
不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...
- UIWebView & javascript
http://blog.163.com/m_note/blog/static/208197045201293015844274/ UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候, ...
- 将所需要的图标排成一列组成一张图片,方便管理。li的妙用
我在做一个网站的header 但是视频教学里面将电话图标,微信图标,以及每一个英文字母右边的小点拼成一副图. (图片的名字是top_ioc.png)拼成的整个图片作为li的背景.通过移动就可以分别将每 ...
- Mysql笔记5之查询
1查询所有的列 select *from student 2查询指定列 select name,age from student 3查询时候使用别名 select name as 别名,age as ...
- width为auto或者100%的区别
一.四个理论 1. 某div不显示设置宽度,那么width为auto. 2. 某div的width在默认情况设置的是盒子模型中content的值 3. 某div的width为100%表示的是此div盒 ...
- Photoshop学习之路
网易云课堂中有的提升课程:http://study.163.com/course/courseMain.htm?courseId=765016&6925ecaa9614a750=Individ ...
- Django: 之Apache、Nginx部署以及发送邮件
在这里讲述部署的方法和常见的问题,并给出了在BAE,JAE,SAE等上面部署的实例. Django + nginx + Gunicorn/uwsgi部署方式,参见另一篇:Django部署(nginx) ...
- VLAN及Trunk实验
VLAN及Trunk实验 一 基本VLAN试验 实验拓扑: 实验目的:掌握VLAN基本配置 掌握静态接口VLAN划分 实验需求:在交换机switch上面创建两个VLAN,vlan2和vlan3,vla ...
- jsp内部传参与重定向传参
1 重定向地址栏会发生改变,因为它会发送两次请求,内部转发,地址栏不会发生改变,因为它只有一个请求2 重定向不能获取上一次请求中的参数,而内部转换可以3 内部转发可以访问WEB-INF下的资源,重定向 ...