poj-1170 (状态压缩形式下的完全背包)
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int b=;//进制
int B[];
int mapp[];// id 映射
int val[];// 价值
int cost[];// 花费
int dp[];//状态下的最小花费
int n,m,goal;// goal 最终的状态
bool cmp (int x,int y) {
for (int i=;i<n;i++) {
int tx=x%b;
int ty=y%b;
if (tx<ty) return false;
x/=b;
y/=b;
}
return true;
}
int main ()
{
ios::sync_with_stdio(false);
B[]=;
for (int i=;i<=;i++) B[i]=B[i-]*b;
cin>>n;
for (int i=;i<n;i++) {// 单价也看做是一种更新方案
int id,num;
cin>>id>>num>>val[i];
mapp[id]=i;
cost[i]=B[i];// i 从0开始
goal+=cost[i]*num;
}
cin>>m;
for (int i=n;i<n+m;i++) {
int t; cin>>t;
int state=;
for (int j=;j<=t;j++) {
int id,num;
cin>>id>>num;
state+=cost[mapp[id]]*num;
}
cost[i]=state;// 优惠方案的cost
cin>>val[i];
}
memset (dp,0x3f,sizeof(dp)); dp[]=;
for (int i=;i<n+m;i++)
for (int j=cost[i];j<=goal;j++) {
if (cmp (j,cost[i]))// 更新的时候 判断各个物品是否大于cost[i](能否更新)
dp[j]=min (dp[j],dp[j-cost[i]]+val[i]);
}
cout<<dp[goal]<<endl;
return ;
}
poj-1170 (状态压缩形式下的完全背包)的更多相关文章
- POJ 1185 状态压缩DP(转)
1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围.故想到用int s[num].至于开多大的数组,可以自己用DFS搜索试试看:也可 ...
- poj 3254(状态压缩+动态规划)
http://poj.org/problem?id=3254 题意:有一个n*m的农场(01矩阵),其中1表示种了草可以放牛,0表示没种草不能放牛,并且如果某个地方放了牛,它的上下左右四个方向都不能放 ...
- Mondriaan's Dream(POJ 2411状态压缩dp)
题意:用1*2的方格填充m*n的方格不能重叠,问有多少种填充方法 分析:dp[i][j]表示i行状态为j时的方案数,对于j,0表示该列竖放(影响下一行的该列),1表示横放成功(影响下一列)或上一列竖放 ...
- poj 3254 状态压缩DP
思路:把每行的数当做是一个二进制串,0不变,1变或不变,找出所有的合法二进制形式表示的整数,即相邻不同为1,那么第i-1行与第i行的状态转移方程为dp[i][j]+=dp[i-1][k]: 这个方程得 ...
- POJ 1185 状态压缩DP 炮兵阵地
题目直达车: POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...
- POJ 2923 Relocation 装车问题 【状态压缩DP】+【01背包】
题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用 ...
- poj 1185 状态压缩
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27926 Accepted: 10805 Descriptio ...
- poj 1324 状态压缩+bfs
http://poj.org/problem?id=1324 Holedox Moving Time Limit: 5000MS Memory Limit: 65536K Total Submis ...
- poj 2923(状态压缩dp)
题意:就是给了你一些货物的重量,然后给了两辆车一次的载重,让你求出最少的运输次数. 分析:首先要从一辆车入手,搜出所有的一次能够运的所有状态,然后把两辆车的状态进行合并,最后就是解决了,有两种方法: ...
随机推荐
- 对当前JAVA流行框架的一些小感悟
这几年,蹦出了不少各种JAVA框架,像是spring boot.spring cloud 和spring mvc或者是mybatis等等. 不断有人感慨,技术更新的太快,自己学都学不过来了. 但是,这 ...
- HDU 6090 Rikka with Graph
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...
- 显示Unicode 字节的对应字符的小技巧
在一段smali代码里看到这样的代码 const-string v0, "\u7528\u6237\u9a8c\u8bc1\u8fc7\u671f\uff0c\u8bf7\u91cd\u65 ...
- Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能
软件: ArcGIS API for Microsoft Silverlight/WPF 9.3.1 操作系统: N/A 摘要: ArcGIS API for Microsoft ...
- English trip V1 - 辅导课 VOCABULARY BRUSH UP(1-6) 词汇刷新 SA:Winona
1.How Do you Feel Now? 形容词 adj. = adjective Describe people and thi ...
- 20170228VBA提取邮件部分信息
Sub 获取OutLook收件箱主题和正文() On Error Resume Next Dim sht As Worksheet Dim olApp As Outlook.Application D ...
- codeforces 547c// Mike and Foam// Codeforces Round #305(Div. 1)
题意:给出数组arr和一个空数组dst.从arr中取出一个元素到dst为一次操作.问每次操作后dst数组中gcd等于1的组合数.由于数据都小于10^6,先将10^6以下的数分解质因数.具体来说从2开始 ...
- JavaScript的深拷贝和浅拷贝总结
深拷贝和浅拷贝 深拷贝:拷贝实例:浅拷贝:拷贝引用(原对象). 说深拷贝和浅拷贝之前,我先去了解了下高程书上的JavaScript的变量类型: 基本类型:undefined.null.Boolean. ...
- 微信小程序自定义模态框(字体图标)
组件已经传到github,自行下载:https://github.com/JinZhenZon/miniapp-customModel 支持如下配置: { outWidth <number&g ...
- cf-789A (思维)
A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...