51nod 1007正整数分组
来源:互联网 发布:广告投放数据分析难吗 编辑:程序博客网 时间:2024/06/01 10:01
dp问题 这是上学期算法实验的一个题 然而上学期的我还是太辣鸡并不会做。。。
简单来说就是用所有数凑出尽量接近于sum/2的结果,这个就可以用dp数组实现,不多说了看代码吧
//@auther zhou//@Number 201408070203//@start time://@finish time:/*@此处注意:*//* 测试数据*/#include<iostream>#include<cstring>#include<vector>#include<cmath>#include<algorithm>using namespace std;int dp[105][5005]={0};int main(){int n;cin>>n;int a[105];int total1=0;for(int i=0;i<n;i++){cin>>a[i];total1+=a[i];}int total=total1/2;//要用那么多个数凑到total/2,不能大于它的情况下尽量逼近它//dp[i][j]表示用前i个数中选出的数,总和不大于j的时候能得到的最大和for(int i=1;i<=n;i++){for(int j=1;j<=total;j++){if(j<a[i-1]){//当前的和不够用了,所以就不取这个了 //cout<<"j"<<j<<" a[i-1]"<<a[i-1]<<"装不下"<<endl;dp[i][j]=dp[i-1][j];}else{//j>a[i-1] 能装下这个数,那就是能装下的最大值了// cout<<"装的下! j"<<j<<" a[i-1]"<<a[i-1]<<endl;dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i-1]]+a[i-1]);//cout<<"dpij的值为"<<dp[i][j]<<endl;}}}//for(int i=0;i<=n;i++){//for(int j=0;j<=total;j++){//cout<<dp[i][j]<<" ";//}//cout<<endl;//}cout<<(total1-2*dp[n][total]);return 0;}
0 0
- 51nod 1007 正整数分组
- 51Nod 1007 正整数分组
- 51nod 1007 正整数分组
- 51nod-1007 正整数分组
- 51nod 1007 正整数分组
- 51Nod 1007 正整数分组
- 51nod 1007 正整数分组
- 51nod 1007正整数分组
- 51Nod 1007 正整数分组
- 51nod 1007 正整数分组
- 51Nod 1007 正整数分组
- 51nod 1007 正整数分组
- 【51nod】1007 正整数分组
- 51nod 1007 正整数分组
- 51nod 1007 正整数分组
- 51nod-正整数分组
- 51nod 正整数分组
- 51nod 正整数分组
- 正则表达式(JavaScript)
- 算法
- spring boot入门
- 时间复杂度和空间复杂度
- localstorage, cookie, session一次具体业务的使用
- 51nod 1007正整数分组
- CDH5.X安装配置kerberos认证过程
- 页面中文乱码的处理
- 19- TCP 协议(Nagle)
- 图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection) 续2
- WPF学习记录2_XAML
- 用Java实现发邮件功能
- React Native 之ScrollView轮播图实现
- poj2576-Tug of War(二维背包)