动态规划问题:
bool类型DP数组代表对于前i个砝码是否可以称出重量j(默认左盘放待称物体)
有三种情况:
不加第i个砝码也能称出来 dp[i-1][j]
加在右盘 dp[i-1][j+arr[i]]
j加载左盘 dp[i-1][abs(j-arr[i])]
三种情况只要有一种为真既可
#include<iostream>
#include<cmath>
using namespace std;
const int N=110,M=2e5+10;
bool dp[N][M];
int arr[N];
int n,m;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
m+=arr[i];
}
dp[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
dp[i][j]=dp[i-1][j]||dp[i-1][j+arr[i]]||dp[i-1][abs(j-arr[i])];
}
}
int ans=0;
for(int i=1;i<=m;i++){
if(dp[n][i]) ans++;
}
cout<<ans<<endl;
return 0;
}
0.0分
4 人评分
C二级辅导-阶乘数列 (C语言代码)浏览:295 |
不容易系列 (C语言代码)浏览:896 |
A+B for Input-Output Practice (V) (C语言代码)浏览:487 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:912 |
时间转换 (Java代码)浏览:617 |
C语言训练-素数问题 (C语言代码)浏览:1065 |
兰顿蚂蚁 (C++代码)浏览:1225 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:611 |
WU-链表数据求和操作 (C++代码)浏览:1382 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:964 |