POJ 1722 SUBTRACT G++ 动态规划 背
程序员文章站
2022-07-15 11:07:56
...
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
//英语 看博友分析 与样本输出不同 抄博友程序 动态规划 背
int dp[108][20010];
int da[108];
int path[108];
int main()
{
int n,T;
scanf("%d%d",&n,&T);
for(int i=1;i<=n;i++)
{
scanf("%d",&da[i]);
}
memset(dp,-1,sizeof(dp));//抄博友程序
dp[1][10000+da[1]]=1;//1表示+
dp[2][10000+da[1]-da[2]]=0;//0表示-
for(int i=3;i<=n;i++)
{
for(int j=0;j<=20000;j++)
{
if(dp[i-1][j]!=-1)//抄博友程序
{
dp[i][j-da[i]]=0;//抄博友程序
dp[i][j+da[i]]=1;
}
}
}
for(int i=n,j=T+10000;i>=1;i--)//抄博友程序
{
if(dp[i][j]==1)
{
path[i]=1;
j=j-da[i];
}else if(dp[i][j]==0)
{
path[i]=0;
j=j+da[i];
}
}
int m=0;
for(int i=2;i<=n;i++)
{
if(path[i]==1)
{
cout<<i-1-m++<<endl;
}
}
for(int i=2;i<=n;i++)
{
if(path[i]==0)//剩下的减号就一直从前往后合并就好了 抄博友分析
{
cout<<1<<endl;
}
}
return 0;
}