题目链接
题目大意:有初始数字x,max和n个数字z[i],每次必须在x上加或减z[i],数字不能超过max或小于0,求最大能达到的数字
题解:bool型dp
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int M=55;int n,be,mx,c[M];bool f[M][1005];void work(){ for(int i=1;i<=n;i++) { for(int j=mx;j>=0;j--){ if(j+c[i]<=mx) f[i][j+c[i]]|=f[i-1][j]; if(j-c[i]>=0) f[i][j-c[i]]|=f[i-1][j]; } } for(int i=mx;i>=0;i--) if(f[n][i]){PRintf("%d/n",i);return ;} puts("-1");}void init(){ cin>>n>>be>>mx; for(int i=1;i<=n;i++) scanf("%d",&c[i]); f[0][be]=1;}int main(){ init(); work(); return 0;}新闻热点
疑难解答