JD 1358:陈博的平均主义 && JD 1420:Jobdu MM分水果(01背包)
2014-08-23 15:11
337 查看
一堆数,分两拨,使得相差最少,当然是用01背包啦
OJ题目:click here~~
AC_CODE
const int inf = 1<<30 ; int dp[98] ; int sum ; vector<int> x ; void fun(int k){ sum = 0 ; while(k){ x.push_back(k%10) ; sum += (k%10) ; k /= 10 ; } } void DP(){ int i , j ; memset(dp , 0 , sizeof(dp)) ; for(i = 0;i < x.size();i++){ for(j = sum/2;j >= x[i];j--) dp[j] = max(dp[j] , dp[j - x[i]] + x[i]) ; } } int main(){ int n , i , j , k , A , B ; //freopen("in.txt" , "r" , stdin) ; while(scanf("%d%d",&A,&B) != EOF){ k = 0 ; for(i = A;i <= B;i++){ x.clear() ; fun(i) ; if(x.size() == 1 || sum&1) continue ; DP() ; if(dp[sum/2] == sum/2) k++ ; } printf("%d\n",k) ; } return 0 ; }
OJ题目:click here~~
AC_CODE
const int maxn = 108 ; int dp[5000008] ; int main(){ int n , i , j , k , sum ; int x[maxn] ; //freopen("in.txt" , "r" , stdin) ; while(scanf("%d",&n) != EOF){ sum = 0 ; memset(dp , 0 , sizeof(dp)) ; for(i = 0;i < n;i++){ scanf("%d",&x[i]) ; sum += x[i] ; } for(i = 0;i < n;i++){ for(j = sum/2;j >= x[i];j--) dp[j] = max(dp[j] , dp[j - x[i]] + x[i]) ; } printf("%d\n",abs(sum - 2*dp[sum/2])) ; } return 0 ; }
相关文章推荐
- 九度笔记之 1420:Jobdu MM分水果
- 九度 1420 Jobdu MM分水果
- 九度笔记之 1358:陈博的平均主义
- 九度OJ题目1420:Jobdu MM分水果
- 九度 1358 陈博的平均主义
- 题目1420:Jobdu MM分水果
- 九度OJ 1358:陈博的平均主义 (遍历、递归)
- 九度OJ 1358:陈博的平均主义 (遍历、递归)
- 九度oj 1420:Jobdu MM分水果
- [Jobdu] 题目1420:Jobdu MM分水果
- 【九度】题目1358:陈博的平均主义
- NYOJ298苹果 && P1005 属于01背包
- 九度 1420 Jobdu MM分水果 -- 动态规划、深度优先搜索
- 九度 1420 Jobdu MM分水果 -- 动态规划、深度优先搜索
- JNI环境变量——JNIEnv*的使用 &&配置jd环境变量
- 关于eclipse的"serializing cdt project settings"解决方案
- "_T":找不到标识符
- Linux内核大讲堂 (三) 解不开的"/"情结
- <Boost> boost::thread 多线程的使用
- html中<li></li>中使用<br>和<li></li>外面使用<br>