poj 01背包
首先我是按这篇文章来确定题目的。
poj3624 Charm Bracelet
模板题
没有要求填满,所以初始化为0就行
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int w[3403];
int h[3403];
int n,m;
int dp[12880+9];
int main()
{
// freopen("input.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d%d",&w[i],&h[i]);
for(int i=0;i<n;i++)
for(int j=m;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+h[i]);
printf("%d\n",dp[m]);
}
poj3628 Bookshelf 2
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int h[25];
int dp[21000000];
int n,s;
int sum;
int main()
{
// freopen("input.txt","r",stdin);
scanf("%d%d",&n,&s);
for(int i=0;i<n;i++){
scanf("%d",&h[i]);
sum+=h[i];
}
int ans=0;
for(int i=0;i<n;i++)
for(int j=sum;j>=h[i];j--)
dp[j]=max(dp[j],dp[j-h[i]]+h[i]);
for(int i=0;i<=sum;i++)
if(dp[i]>=s){
ans=dp[i]-s;
break;
}
printf("%d\n",ans);
}
poj3211 Washing Clothes
这道题就是两个人同时在一个盆子里洗衣服,算的时候每件衣服独立算,然后相同衣服之间可以连续,我们需要求得是在一半体积下那个花的时间大的值。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<iostream>
#include<vector>
#include<cstring>
#include<map>
using namespace std;
int n,m;
map<string,int> q;
int w[105];
vector<int> g[11];
int dp[50000];
int main()
{
// freopen("input.txt","r",stdin);
while(scanf("%d%d",&n,&m)==2&&n&&m)
{
string str;
memset(w,0,sizeof(w));
q.clear();
for(int i=0;i<=10;i++)
g[i].clear();
for(int i=0;i<n;i++)
{
cin>>str;
q[str]=i;
}
for(int i=0;i<m;i++)
{
int t,v;
cin>>v>>str;
t=q[str];
g[t].push_back(v);
w[t]+=v;
}
int ans=0;
for(int i=0;i<n;i++)
{
int v=w[i]/2;
memset(dp,0,sizeof(dp));
for(int j=0;j<g[i].size();j++)
for(int k=v;k>=g[i][j];k--)
{
dp[k]=max(dp[k],dp[k-g[i][j]]+g[i][j]);
}
ans+=(w[i]-dp[v]);
}
printf("%d\n",ans);
}
}
poj1745 Divisibility
这道题如果取摸后范围比较小,第二维不大于100,然后记忆化背包(非递归搜索),根据能达到的值推能达到的值,衍生出前n个时的所有状态。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<iostream>
#include<vector>
#include<cstring>
#include<map>
using namespace std;
int n,k;
int c[10005];
int dp[10005][105];
int main()
{
//freopen("input.txt","r",stdin);
int t;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&t);
if(t<0) t=-t;
t%=k;
c[i]=t;
}
dp[0][c[0]]=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<k;j++)
{
if(dp[i-1][j])
{
dp[i][(j+c[i])%k]=1;
dp[i][(j+k-c[i])%k]=1;
}
}
}
if(dp[n-1][0])
printf("Divisible\n");
else
printf("Not divisible\n");
}
poj1976 A Mini Locomotive
3辆车运货,共有n堆货,每辆可以运连续k堆,求最大运货量
保证k*3<=n;也就是说要运货量最大必须堆数为k。
dp[i][j]为前j次前i堆最大运货量的最大运货量
如果i<j*k;那么只能全运
第i堆不运:dp[i-1][j]
第i堆运:dp[i-k][j-1]+sum;
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int a[50005];
int n,k;
int dp[50005][4];
int main()
{
//freopen("input.txt","r",stdin);
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
a[0]=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i]+=a[i-1];
}
scanf("%d",&k);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=3;j++)
{
if(i<j*k)
dp[i][j]=i;
else
dp[i][j]=max(dp[i-1][j],dp[i-k][j-1]+a[i]-a[i-k]);
}
}
printf("%d\n",dp[n][3]);
}
}
poj1837 Balance
状态压缩求方案数
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int k,n,f;
int dp[21][15100];
int h[21];
int w[21];
int main()
{
// freopen("input.txt","r",stdin);
scanf("%d%d",&f,&n);
for(int i=0;i<f;i++)
scanf("%d",&h[i]);
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
dp[0][7500]=1;
for(int i=1;i<=n;i++)
{
for(int k=0;k<=15000;k++)
{
if(dp[i-1][k])
{
for(int j=0;j<f;j++)
{
dp[i][k+h[j]*w[i]]+=dp[i-1][k];
}
}
}
}
printf("%d\n",dp[n][7500]);
}
poj1948 Triangular Pastures
n个线,组一个三角形,求三角形的最大面积。
海伦公式
,p为半周长
因为周长已知,知道两条边就能确定面积。
设dp[i][j](i>j),然后确定每一条边是否加入那个边,由已知状态推出未知状态,随之更新最大面积。
每条边不可能超过周长的一半。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int n;
int a[45];
int c;
int dp[1605][1605];
int aa[4];
// a+b>c-a-b
//
int check(int x,int y)
{
aa[0]=x;
aa[1]=y;
aa[2]=c-x-y;
if(aa[0]+aa[1]<aa[2]||aa[1]+aa[2]<aa[0]||aa[0]+aa[2]<aa[1])
return -1.0;
double t=c*1.0/2;
double ans=sqrt(t*(t-aa[0])*(t-aa[1])*(t-aa[2]))*100.0;
return ans;
// printf("%d %d %d %d\n",aa[0],aa[1],aa[2],(int)ans);
} int main()
{
// freopen("input.txt","r",stdin);
//printf("")
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
c+=a[i];
}
dp[0][0]=1;
int ans=-1.0;
for(int i=0;i<n;i++)
{
for(int j=c/2;j>=0;j--)
{
for(int k=c/2;k>=j;k--)
{
if(j>=a[i]&&dp[j-a[i]][k])
dp[j][k]=1;
if(k>=a[i]&&dp[j][k-a[i]])
dp[j][k]=1;
if(dp[j][k])
ans=max(ans,check(j,k));
// printf("%d\n",ans);
}
}
}
printf("%d\n",ans);
}
poj2923
待定
poj 01背包的更多相关文章
- (01背包变形) Cow Exhibition (poj 2184)
http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid ...
- [POJ 2184]--Cow Exhibition(0-1背包变形)
题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ 3624 Charm Bracelet(01背包裸题)
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38909 Accepted: 16862 ...
- POJ 3624 Charm Bracelet (01背包)
题目链接:http://poj.org/problem?id=3624 Bessie has gone to the mall's jewelry store and spies a charm br ...
- POJ 3624 Charm Bracelet(0-1背包模板)
http://poj.org/problem?id=3624 题意:给出物品的重量和价值,在重量一定的情况下价值尽可能的大. 思路:经典0-1背包.直接套用模板. #include<iostre ...
- POJ 2151 Check the difficulty of problems 概率dp+01背包
题目链接: http://poj.org/problem?id=2151 Check the difficulty of problems Time Limit: 2000MSMemory Limit ...
- POJ 1112 Team Them Up! 二分图判定+01背包
题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ...
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- POJ 2184 Cow Exhibition【01背包+负数(经典)】
POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...
随机推荐
- FFMPEG视音频解码【一】
多媒体的时代,得多了解点编解码的技术才行,而ffmpeg为我们提供了一系列多媒体编解码的接口,如何用好这些接口达到自己所需要的目的,这也是一门重要的学问. 要是了解得不够,总是会遇到一堆又一堆问题:网 ...
- Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解
1) struts-default.xml 这个文件是struts2框架默认加载的配置文件.它定义struts2一些核心的bean和拦截器. <?xml version="1.0&qu ...
- Hadoop常见异常及其解决方案
1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...
- 【solr专题之一】Solr快速入门
一.Solr学习相关资料 1.官方材料 (1)快速入门:http://lucene.apache.org/solr/4_9_0/tutorial.html,以自带的example项目快速介绍发Solr ...
- HTML5简单入门系列(三)
前言 本篇介绍HTML5支持的Web存储(Web Storage)和HTML 5 应用程序缓存. 客户端存储数据介绍 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没 ...
- java设计模式之Proxy(代理模式)
java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...
- py正则表达式
1.元字符 . ^ $ * + ? {} [] \ | () --> [] : - 常用来指定一个字符集:[abc], [a-z] 匹配任意一个字符 - 元字符在字符集中不起作用:[akm ...
- Mysql基本类型(字符串类型)——mysql之二
转自: http://www.cnblogs.com/doit8791/archive/2012/05/28/2522556.html 1.varchar类型的变化 MySQL 数据库的varchar ...
- Java所有编码问题参考手册
一.编码基本知识 1.iso8859-1 ——属于单字节编码,最多能表示的字符范围是 0-255,应用于英文系列.比如,字母 'a' 的编码为0x61=97. 很明显,iso8859-1 编码表示的 ...
- 开机时候系统总是提醒Android系统更新
今天刷了个android的rom,平常没有经常刷机,对这个也不是特别了解. 但是刷完开机,显示系统升级,一开始都是18个app,后来捣鼓了几次,安装了几个常用的软件,居开机的时候,升级的app需要90 ...