动态规划问题:
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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复