Mr Zz

导航

Big Event in HDU

给你多个价值  尽可能分成两份相近 可以相等
下面是背包的做法但是不知道为什么是错 的   有用多背包解决问题的   设置一下无限加入的次数 就可提高效率
背包代码 有人看到错误告诉我下罗~
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAX 6000
int v[MAX];
int f[MAX*25];
int main(){
int n;
freopen("t.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
if(n==-1)
break;
int va,nu,i,j;
int sum = 0 ,counts = 0;
memset(v,0,sizeof(v));
memset(f,0,sizeof(f));
for(i=1;i<=n;i++) {
scanf("%d%d",&va,&nu);
sum+=va*nu;
for(j=1;j<=nu;j++) {
v[j+counts] = va;
}
counts += nu;
}
int mid = sum/2;
for(i=1;i<=counts;i++)
for(j=mid;j>=v[i];j--)
{
f[j] = max(f[j],f[j-v[i]]+v[i]);
}
printf("%d %d\n",sum-f[mid],f[mid]);
}
return 0;
}


下面是母函数做的能ac
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAX 6000
int v[MAX];
int f[MAX*25];
int main(){
int n;
freopen("t.txt","r",stdin);
while(scanf("%d",&n)!=EOF){
if(n==-1)
break;
int va,nu,i,j;
int sum = 0 ,counts = 0;
memset(v,0,sizeof(v));
memset(f,0,sizeof(f));
for(i=1;i<=n;i++) {
scanf("%d%d",&va,&nu);
sum+=va*nu;
for(j=1;j<=nu;j++) {
v[j+counts] = va;
}
counts += nu;
}
int mid = sum/2;
for(i=1;i<=counts;i++)
for(j=mid;j>=v[i];j--)
{
f[j] = max(f[j],f[j-v[i]]+v[i]);
}
printf("%d %d\n",sum-f[mid],f[mid]);
}
return 0;
}
//母函数就解决了 就是慢了点
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAX 250001
int c[2][MAX];
int num;
void work(int v,int x) {
int i,j,k;
for(j=0;j<=num;j++)
for(k=0;k<=x*v;k+=v){
c[1][j+k] += c[0][j];
}
num += x*v;
for(i=0;i<=num;i++) {
c[0][i] = c[1][i];
c[1][i] = 0;
}
}
int main(){
int n;
freopen("t.txt","r",stdin);
while(scanf("%d",&n)!=EOF) {
memset(c,0,sizeof(c));
int i,j,va,nu,sum = 0;
num = 0;
if(n==-1)
break;
for(i=0;i<n;i++) {
scanf("%d%d",&va,&nu);
sum+=va*nu;
if(i==0){
num = nu*va;//第一次传进来的时候是固定的第一个式子的个数
for(j=0;j<=nu*va;j+=va) {
c[0][j] = 1;
}
}
else{
work(va,nu);
}
}
for(i=sum/2;i>=0;i--) {
if(c[0][i]){
printf("%d% d\n",sum-i,i);
break;
}
}
}
return 0;
}


posted on 2011-10-13 12:40  Mr Zz  阅读(308)  评论(1)    收藏  举报