博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ural 1005 Stone Pile
阅读量:6905 次
发布时间:2019-06-27

本文共 1160 字,大约阅读时间需要 3 分钟。

    这是道01背包题   ,尽管背包不会  ,可是还是看出来了,递推公式写啊写没写出来,后来一同学说是dfs。这我就開始了A了,

   题意是给你n个重量是Wn的石头  让你放到两个包里面。看他们两个差值最小,而且输出这个差值。

dfs代码

#include 
int sum;int h,T;int a[100];void dfs (int x,int y){ if(x==T) { if(y>h) h=y ; return ; } if(h==sum/2) return ; if(y+a[x]<=sum/2)//等于号一定要有。这样调了好久好久,由于他们有可能相等。

dfs(x+1,y+a[x]); dfs(x+1,y); } int main() { while(scanf("%d",&T)==1) { sum=0;h=0; for(int i=0;i<T;i++) { scanf("%d",&a[i]); sum+=a[i]; } // printf("%d\n",sum); dfs(0,0); // printf("%d\n",h); printf("%d\n",sum-2*h); } }

dp代码
#include 
#include
const int maxx = 2000010;int dp[maxx],a[25],n;int abs(int x){ return (x>0)?x:-x;}int maxxx(int a,int b){ return (a>b)?

a:b; } int main() { while(scanf("%d",&n)==1) { if(n==1) { scanf("%d",&a[0]); printf("%d",a[0]); continue; } int sum = 0,temp,ans; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum += a[i]; dp[i] = 0; } temp = sum/2; dp[0] = 0; for(int i=1;i<=n;i++) for(int j=temp;j>=a[i];j--) dp[j] = maxxx(dp[j-a[i]]+a[i],dp[j]);//求在【0-temp】最大的数就好了 for(int i=temp;i>=0;i--) if(dp[i]!=0) { ans = dp[i]; break; } printf("%d\n",abs(sum-2*ans)); } return 0; }

转载地址:http://gjldl.baihongyu.com/

你可能感兴趣的文章
Android Contact分析(一):Data, RawContact, Contact之间的关系
查看>>
UVA 156 (13.08.04)
查看>>
面向对象的三大特点
查看>>
Linux sed命令详解
查看>>
hdu1381 Crazy Search(hash map)
查看>>
java----堆区、方法区和栈区
查看>>
小米模仿抄袭盗版发展线路受到重创!!
查看>>
MusicXML 3.0 (8) - 符干方向
查看>>
三星I9000在ubuntu下用adb调试
查看>>
Android eclipse常用快捷键
查看>>
Andriod使用webview控件往APP里内嵌网页
查看>>
1148 - Mad Counting(数学)
查看>>
2016春招Android开发实习生(网易传媒)笔试
查看>>
Syslog-ng
查看>>
深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存...
查看>>
10-移动端开发教程-移动端事件
查看>>
分页存储过程
查看>>
Eclipse+maven发布ee项目jar包未发布
查看>>
javafx:JavaFX Scene Builder 2.0打开含有第三方jar包的fxml文件报错 Caused by: java.lang.ClassNotFoundException...
查看>>
hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵
查看>>