欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POJ 1722 SUBTRACT G++ 动态规划 背

程序员文章站 2022-07-15 11:07:56
...

POJ 1722 SUBTRACT G++ 动态规划 背

POJ 1722 SUBTRACT G++ 动态规划 背

POJ 1722 SUBTRACT G++ 动态规划 背

#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;
}