B. Checkout Assistant 01背包变形
http://codeforces.com/problemset/problem/19/B
对于每个物品,能偷多ti个,那么先让ti + 1, 表示选了这个东西后,其实就是选了ti + 1个了。那么只需要选出>=n个即可。
一开始的时候想不到ti + 1,一直不知道能多选ti个后,本来是选了多少个。
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <assert.h>
- #define IOS ios::sync_with_stdio(false)
- using namespace std;
- #define inf (0x3f3f3f3f)
- typedef long long int LL;
- #include <iostream>
- #include <sstream>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <string>
- const int maxn = 2e3 + ;
- int w[maxn];
- int val[maxn];
- LL dp[ * + ];
- void work() {
- int n;
- cin >> n;
- int sum = ;
- for (int i = ; i <= n; ++i) {
- cin >> w[i] >> val[i];
- w[i]++;
- w[i] = min(w[i], );
- sum += w[i];
- }
- for (int i = ; i <= * - ; ++i) {
- dp[i] = 1e17L;
- }
- dp[] = ;
- sum = min(, sum);
- for (int i = ; i <= n; ++i) {
- for (int j = sum; j >= w[i]; --j) {
- dp[j] = min(dp[j], dp[j - w[i]] + val[i]);
- }
- }
- LL ans = 1e17L;
- for (int i = n; i <= sum; ++i) {
- ans = min(ans, dp[i]);
- }
- cout << ans << endl;
- }
- int main() {
- #ifdef local
- freopen("data.txt", "r", stdin);
- // freopen("data.txt", "w", stdout);
- #endif
- work();
- return ;
- }
写了一个超时的二维费用背包
dp[i][j]表示前n个数选出i个,有j个可以免费拿的情况。
直接超时。
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <assert.h>
- #define IOS ios::sync_with_stdio(false)
- using namespace std;
- #define inf (0x3f3f3f3f)
- typedef long long int LL;
- #include <iostream>
- #include <sstream>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <string>
- const int maxn = 2e3 + ;
- LL dp[maxn][maxn];
- int ti[maxn];
- int cost[maxn];
- void work() {
- int n;
- cin >> n;
- int sum = ;
- for (int i = ; i <= n; ++i) {
- cin >> ti[i] >> cost[i];
- sum += ti[i];
- }
- for (int i = ; i <= + ; ++i) {
- for (int j = ; j <= + ; ++j) {
- dp[i][j] = 1e17L;
- }
- }
- dp[][] = ;
- sum = min(, sum);
- for (int i = ; i <= n; ++i) {
- for (int j = i; j >= ; --j) {
- for (int k = sum; k >= ti[i]; --k) {
- dp[j][k] = min(dp[j][k], dp[j - ][k - ti[i]] + cost[i]);
- }
- }
- }
- LL ans = 1e17L;
- for (int i = ; i <= n; ++i) {
- for (int j = sum; j >= ; --j) {
- dp[i][j] = min(dp[i][j], dp[i][j + ]);
- }
- }
- for (int i = ; i <= n; ++i) {
- ans = min(ans, dp[i][n - i]);
- }
- cout << ans << endl;
- // cout << dp[3][5] << endl;
- }
- int main() {
- #ifdef local
- freopen("data.txt", "r", stdin);
- // freopen("data.txt", "w", stdout);
- #endif
- IOS;
- work();
- return ;
- }
B. Checkout Assistant 01背包变形的更多相关文章
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- CF#214 C. Dima and Salad 01背包变形
C. Dima and Salad 题意 有n种水果,第i个水果有一个美味度ai和能量值bi,现在要选择部分水果做沙拉,假如此时选择了m个水果,要保证\(\frac{\sum_{i=1}^ma_i}{ ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
- POJ 3211 Washing Cloths(01背包变形)
Q: 01背包最后返回什么 dp[v], v 是多少? A: 普通01背包需要遍历, 从大到小. 但此题因为物品的总重量必定大于背包容量, 所以直接返回 dp[V] 即可 update 2014年3月 ...
- HDU 2955 Robberies(01背包变形)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)
题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值. 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =. 代码如下: #in ...
随机推荐
- Django 后台管理设置(admin.py)
上面是两种后台效果图,第一张是默认情况下Django的后台,第二张是稍作修改后的情况,下面记录下作了哪些修改: 代码: class ArticleAdmin(admin.ModelAdmin): li ...
- 搞定迅雷固件在TP-LINK WR720N,127.0.0.1 9000 获取不到激活码
本帖最后由 exzzzipad 于 2014-7-2 22:33 编辑 基本情况:设备:TP-LINK WR720N目前固件:[antclan][20120825]720N-4M-NAS-withSA ...
- js屏蔽浏览器右键菜单,粘贴,复制,剪切,选中(转)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- WinForm DataGridView分页功能
WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件 .CS: 1 using System; ...
- Ajax跨域请求
客户端前台: //浏览器支持跨域访问,置于Ajax方法前$.support.cors = true; 服务器后台: //设置服务器端对于CORS的跨域请求支持,置于后台方法第一行 Response.A ...
- 这些年正Android - 身在他乡
“从不敢想到想去做到,做到我想的,事实证明我并不像他们想象的那样脆弱.我只是需要一盏灯,一架钢琴,一支麦克风.曾经想象过做一名医生救死扶伤,也曾想过做律师,做记者,做奥运冠军,但是都没有结果.因为我最 ...
- jQuery.fn.extend() 与 jQuery.extend()
jQuery.fn如何扩展. jQuery插件 $.fn(object)与$.extend(object) jQuery提供了两个方法帮助开发插件 $.extend(object);扩展jQuery类 ...
- Orcle基本语句(五)
--分页查询---begin --sqlserver top --mysql limit --oracle rownum(伪列),oracle中伪列(rownum,rowid) --查询工资为前五的信 ...
- ipython notebook设置工作路径和自动保存.py文件 ipython_notebook_config.py
在安装完Anaconda,选择了配置环境变量后,打开cmd命令行 1. 打开命令行, 键入 ipython profile create 2. 键入 , 根据这个地址, 打开profile所在的文件夹 ...
- C语言运算符优先级和口诀(转)
一共有十五个优先级: 1 () [] . -> 2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof 3 ...