5 条题解
-
1邓梓昊 LV 7 @ 2024-12-17 13:47:26
#include <stdio.h> #include <iostream> using namespace std; inline int read(string n){ int x = 0, f = 1; printf("%s", n.c_str()); char c = getchar(); while(c < '0' || c > '9'){ if(c == '-') f = -1; c = getchar(); } while(c >= '0' && c <= '9'){ x = x * 10 + c - 48; c = getchar(); } return x * f; } inline float input(string n){ float x = 0, f = 1, x2 = 0, cnt = 0, i = 0; printf("%s", n.c_str()); char c = getchar(); while(c < '0' || c > '9'){ if(c == '-') f = -1; c = getchar(); } while(c >= '0' && c <= '9'){ x = x * 10 + c - 48; c = getchar(); } c = getchar(); while(c >= '0' && c <= '9'){ x2 = x2 * 10 + c - 48; cnt++; c = getchar(); } for(; i < cnt; i++) x2 /= 10.0; return (x + x2) * f; } void write(int n) { if(n < 0){ putchar('-'); n = -n; } if(n > 9) write(n / 10); putchar(n % 10 + '0'); return; } void print(float n){ printf("%lf\n", n); return; } int m, n, f[20010], w[40], i, j; int main(){ m = read(""); n = read(""); for(i = 1; i <= n; i++) w[i] = read(""); for(i = 1; i <= n; i++) for(j = m; j >= w[i]; j--) if(f[j] < f[j - w[i]] + w[i]) f[j] = f[j - w[i]] + w[i]; write(m-f[m]); return 0; }
-
-12023-8-20 14:34:35@
#include<bits/stdc++.h> using namespace std; int w[100001],v[100001],dp[100001]; int main(){ int n,m; cin>>m>>n; for(int i=1;i<=n;i++){ cin>>w[i]; } for(int i=1;i<=n;i++){ for(int j=m;j>=w[i];j--){ dp[j]=max(dp[j],dp[j-w[i]]+w[i]); } } cout<<m-dp[m]; return 0; }
-
-12023-5-26 21:51:39@
/***************** 备注: *****************/ #include <iostream> #include <iomanip> #include <cmath> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; #define LL long long #define MAXM 3010 #define MAXN 3010 const int N =1e5+10; const int INF =0x3f3f3f3f; int maxx = -INF,n,minn = INF,v; int a[N]; void dfs(int step,int sum) { if (sum <= v) maxx = max(maxx,sum); if (sum > v or step > n) return; dfs(step+1,sum+a[step]); dfs(step+1,sum); } int main(){ cin >> v >> n; for (int i = 1;i<=n;i++) { cin >> a[i]; } dfs(1,0); cout << v - maxx; return 0; }
-
-12022-10-26 22:37:13@
#include<bits/stdc++.h> using namespace std; int q,a[100001],b[100001]; int main(){ int w; cin>>w>>q; int i, j; for (i = 0; i < q; i++){ cin>>a[i]; } for (i = 0; i < q; i++){ for (j = w; j >= a[i]; j--) b[j] = max(b[j], b[j - a[i]] + a[i]); } cout<<w - b[w]; return 0; }
-
-12022-10-5 9:50:51@
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <cstdio> #include <string> #include <iomanip> #include <queue> #include <stack> #include <list> #include <map> #include <vector> #include <fstream> using namespace std; const int N = 1e5+10; const int INF = 0x3f3f3f3f; int maxx = -INF,n,minn = INF,v; int a[N]; void dfs(int step,int sum){ if (sum <= v) maxx = max(maxx,sum); if (sum > v or step > n) return; dfs(step+1,sum+a[step]); dfs(step+1,sum); } int main(){ cin >> v >> n; for (int i = 1;i<=n;i++){ cin >> a[i]; } dfs(1,0); cout << v - maxx; return 0; }
- 1
信息
- ID
- 1300
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 293
- 已通过
- 78
- 上传者