首先我是按这篇文章来确定题目的。

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背包的更多相关文章

  1. (01背包变形) Cow Exhibition (poj 2184)

    http://poj.org/problem?id=2184   Description "Fat and docile, big and dumb, they look so stupid ...

  2. [POJ 2184]--Cow Exhibition(0-1背包变形)

    题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  3. POJ 3624 Charm Bracelet(01背包裸题)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 ...

  4. 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 ...

  5. POJ 3624 Charm Bracelet(0-1背包模板)

    http://poj.org/problem?id=3624 题意:给出物品的重量和价值,在重量一定的情况下价值尽可能的大. 思路:经典0-1背包.直接套用模板. #include<iostre ...

  6. POJ 2151 Check the difficulty of problems 概率dp+01背包

    题目链接: http://poj.org/problem?id=2151 Check the difficulty of problems Time Limit: 2000MSMemory Limit ...

  7. POJ 1112 Team Them Up! 二分图判定+01背包

    题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ...

  8. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  9. POJ 2184 Cow Exhibition【01背包+负数(经典)】

    POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...

随机推荐

  1. Linux串口编程のtermios 结构

    termios 结构是在POSIX规范中定义的标准接口,它类似于系统V中的termio接口,通过设置termios类型的数据结构中的值和使用一小 组函数调用,你就可以对终端接口进行控制. 可以被调整来 ...

  2. uva 508 Morse Mismatches

    Samuel F. B. Morse is best known for the coding scheme that carries his name. Morse code is still us ...

  3. GO语言基础

    Go语言开发 一.Linux下搭建Go开发环境 首先下载Go语言的开发安装包,不管是在官方网站或者国内的Golang镜像都是可以的,注意区分64位和32位的安装包. 下载完安装包之后tar zxvf进 ...

  4. 【solr专题之四】关于VelocityResponseWriter

    一.关于Velocity的基本配置 在Solr中,可以以多种方式返回搜索结果,如单纯的文本回复(XML.JSON.CSV等),也可以返回velocity,js等格式.而VelocityResponse ...

  5. Windows7上FTP服务器建立

    1. FTP服务器建立 注意:千万不能使用FTP和ftp建立用户,否则无法登陆ftp服务器. 1.1本地机器上创建一个用户 这个用户是用来登录到FTP的.我的电脑右键->管理->本地用户和 ...

  6. android启动activity文本框不获得焦点

    在开发中,常常会碰到这种情况,打开一个activity后,第一个文本框自动获得焦点,同时会弹出软键盘输入框,这样很影响用户体验,现在来看解决方法. 我们先来看看为什么会出现上述情况,原因很简单,文本框 ...

  7. 解决Webservice内存溢出

    public class FileExercise : System.Web.Services.WebService { [WebMethod] public void HelloWorld() { ...

  8. sql 添加约束

    在表中添加约束,基本常用的有两种类型,一个是创建表时同时添加约束,另一个是创建好表通过修改表添加约束,在这里是创建表时同时添加约束,但是有两种不同的用写法. 在这里列举出一些创建约束的形式,共参考(均 ...

  9. Effective Java单元测试JUnit - 就是爱Java

    实作了RoleImpl class,现在要开始单元测试了,或许你会觉得奇怪,才刚做好一个class而已,它并没有商业规则,只有getter/setter与clone(),那是要测试什么呢?没错,传统上 ...

  10. 全 Javascript 的 Web 开发架构:MEAN

    http://developer.51cto.com/art/201404/434759.htm 全 Javascript 的 Web 开发架构:MEAN 引言 最近在Angular社区的原型开发者间 ...