hdoj1059
来源:互联网 发布:百度 seo 编辑:程序博客网 时间:2024/06/07 02:21
这是个01背包的稍微变型问题,因为刚开始做着道题的时候只是对背包了解了一点,导致老是拿着求最大解的思路来求解这道题,当然是不会过的!后来又看了分析,看了同学的代码才逐渐了解!hdoj2602是01背包,hdoj1114为完全背包,hdoj2191为多重背包,这些都是很规范的背包问题的。而hdoj1059是对可以取得解的考察,所以只需判断是否可以得到最优解就可以了,当然思路很重要!
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,sum,k,t,m=0,a[7],b[10001],c[100010],ans;
while(1)
{m++;
for(i=1;i<=6;i++)
scanf("%d",&a[i]);
if((a[1]==0)&&(a[2]==0)&&(a[3]==0)&&(a[4]==0)&&(a[5]==0)&&(a[6]==0))
break;
k=0;
for(i=1;i<=6;i++)
{ t=1;
if(a[i]!=0)
{
while(t<a[i])
{
b[k++]=i*t;
a[i]=a[i]-t;
t=t*2;
}
b[k++]=i*a[i];
}
}
sum=0;t=0;
for(i=0;i<k;i++)
sum=sum+b[i];
if(sum%2!=0)
t=1;
else
{
t=1;
sum=sum/2; memset(c,0,sizeof(0));
for(i=0;i<k;i++)
{
ans=0;
for(j=0;j<i;j++)
{
if((c[j]>ans)&&(c[j]+b[i]<=sum))
ans=c[j];
}
c[i]=b[i]+ans;
if(c[i]==sum)
{
t=0;
break;
}
}
}
if(t==1)
printf("Collection #%d:\nCan't be divided.\n\n",m);
else
printf("Collection #%d:\nCan be divided.\n\n",m);
}
return 0;
}
这个题我没有写出来状态转移方程,总体来说是对背包最优解的考察,每次都判断从规定的体积到每个循环的最小的体积能否被装满,然后再求出最优解,又是对别人的一个coppy啊!
int main()
{
int i,j,sum,k,t,m=0,a[7],b[10001],c[100010],ans;
while(1)
{m++;
for(i=1;i<=6;i++)
scanf("%d",&a[i]);
if((a[1]==0)&&(a[2]==0)&&(a[3]==0)&&(a[4]==0)&&(a[5]==0)&&(a[6]==0))
break;
k=0;
for(i=1;i<=6;i++)
{ t=1;
if(a[i]!=0)
{
while(t<a[i])
{
b[k++]=i*t;
a[i]=a[i]-t;
t=t*2;
}
b[k++]=i*a[i];
}
}
sum=0;t=0;
for(i=0;i<k;i++)
sum=sum+b[i];
if(sum%2!=0)
t=1;
else
{
t=1;
sum=sum/2; memset(c,0,sizeof(0));
for(i=0;i<k;i++)
{
ans=0;
for(j=0;j<i;j++)
{
if((c[j]>ans)&&(c[j]+b[i]<=sum))
ans=c[j];
}
c[i]=b[i]+ans;
if(c[i]==sum)
{
t=0;
break;
}
}
}
if(t==1)
printf("Collection #%d:\nCan't be divided.\n\n",m);
else
printf("Collection #%d:\nCan be divided.\n\n",m);
}
return 0;
}
这个题我没有写出来状态转移方程,总体来说是对背包最优解的考察,每次都判断从规定的体积到每个循环的最小的体积能否被装满,然后再求出最优解,又是对别人的一个coppy啊!
- hdoj1059
- hdoj1059
- {....................}hdoj1059
- HDOJ1059
- HDOJ1059 Dividing
- HDOJ1059-Dividing(DP)
- hdoj1059 Dividing 多重背包
- hdoj1059 Dividing (水题)
- hdoj1059 Dividing(多重背包+二进制化简)
- 南阳理工OJ547---------------HDOJ1059---------多重背包~~~~有模板!!
- 快速幂求余模板
- Mongodb源码分析--主程序入口main()
- c/c++中delete/free 指针后,设置p=NULL的好处
- UDP的socket绑定到IP地址后无法接受广播数据
- TinyXml 修改指定节点和增加节点的做法
- hdoj1059
- iOS (ProjectName-info.plist) (ProjectName-Prefix.pch) 解析
- windows 和ubuntu 下 安装sts遇到的各种问题
- appletviewer如何传参数applet,如何命令方式关闭applet
- poj 1951 Extra Krunch
- css优先级阐述
- 设为首页和加入收藏的HTML js代码
- 架设ftp服务器
- 计算年龄代码