#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int f[20001]; int main(void){ int V,n; cin>>V>>n; for(int i=1;i<=n;i++){ int w; cin>>w; for(int v=V;v>=w;v--) f[v]=max(f[v],f[v-w]+w); } cout<<V-f[V]; return 0; }
解题思路:
直接一个滚动数组,使用一个01背包就可以解决。
注意事项:
参考代码:
0.0分
2 人评分
C语言训练-斐波纳契数列 (C语言代码)浏览:1174 |
多输入输出练习1 (C语言代码)浏览:1188 |
简单的a+b (C语言代码)浏览:340 |
WU-陶陶摘苹果2 (C++代码)浏览:975 |
三角形 (C++代码)记忆化搜索浏览:1234 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:743 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:916 |
三角形 (C语言代码)浏览:914 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:326 |
Tom数 (C语言代码)浏览:555 |