zoukankan      html  css  js  c++  java
  • [51NOD1007] 正整数分组(DP,记忆化搜索)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1007

    dp(id, s)表示第id个数之前,其中一个集合和为s的差,按照取和不取dfs就行。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 110;
     5 const int maxm = 11000;
     6 const int inf = 100100100;
     7 int n;
     8 int a[maxn], sum;
     9 int dp[maxn][maxm];
    10 
    11 int dfs(int id, int s) {
    12   if(id == n+1) return abs(s-(sum-s));
    13   if(~dp[id][s]) return dp[id][s];
    14   return dp[id][s] = min(dfs(id+1, s), dfs(id+1, s+a[id]));
    15 }
    16 
    17 int main() {
    18   // freopen("in", "r", stdin);
    19   while(~scanf("%d", &n)) {
    20     memset(dp, -1, sizeof(dp));
    21     sum = 0;
    22     for(int i = 1; i <= n; i++) {
    23       scanf("%d", &a[i]);
    24       sum += a[i];
    25     }
    26     printf("%d
    ", dfs(1, 0));
    27   }
    28   return 0;
    29 }
  • 相关阅读:
    ajax传json
    JSON 转 VO
    字符串转数组
    "No 'Access-Control-Allow-Origin' header"跨域问题CROS
    jdbc连接SQLServer
    Jquery判断checkbox选中状态
    JSON与null
    点击劫持
    Eclipse 入手配置
    SQL练习(一)
  • 原文地址:https://www.cnblogs.com/kirai/p/5993634.html
Copyright © 2011-2022 走看看