题意
吉他有一个初始音量,吉他手每弹奏一首歌曲,都要将音量改变ci,可加可减,但音量不能小于0,也不能高于max。求最后一首歌曲音量最大值。无解(无法避免音量超出范围)输出-1。
数据范围
$$歌曲数n\leq50\ \ \ ;\ \ \ ci\leq max\ \ \ ;\ \ \ 初始值begin,max\leq1000$$
题解
数据如此之小……
v[i][j]表示第i首歌时音量j是否能达到,只要v[i-1][j-a[i]]和v[i-1][j+a[i]]有一个是true就行。
无力吐槽这是省选题……
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| bool v[60][1010]; int main() { int n,b,m,a,i; scanf("%d%d%d",&n,&b,&m); v[0][b]=1; for (int i=1;i<=n;i++) { scanf("%d",&a); for (int j=0;j<=m;j++) v[i][j]=(j-a>=0&&v[i-1][j-a])||(j+a<=m&&v[i-1][j+a]); } for (i=m;i>=0;i--) if (v[n][i]) break; printf("%d",i); return 0; }
|
