1 砝码称重【第十二届】【省赛】【A组】
背包问题
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+100;
const int INF=0x3f3f3f3f;
int n,sum;
int w[1010];
int res;
bool dp[1010][201010];//记录所有的情况
signed main(){
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++){
cin>>w[i];
sum+=w[i];
}
//sum枚举查看所有情况
dp[0][0]=true;
for(int i=1;i<=n;i++){
for(int j=0;j<=sum;j++){
//三种情况只要有一种存在即为真
dp[i][j]=(dp[i-1][j]||dp[i-1][j+w[i]]||dp[i-1][abs(j-w[i])]);
if(i==n&&j!=0&&dp[n][j]) r