一.动态规划
学了一段时间dp之后再重新来看01背包,发现已经能剖析问题并写出代码了
直接上:
#include<iostream>
#include<cstdio>
#include<math.h>
#include<cstring>
using namespace std;
int dp[101][101];
int t[101],v[101];
int main()
{
int T,M;
cin>>T>>M;
for(int i=1;i<=M;i++)
{
cin>>t[i]>>v[i];
}
for(int i=1;i<=M;i++)//遍历每个物品
{
for(int j=1;j<=T;j++)//
{
dp[i][j]=dp[i-1][j];
if(j>=t[i])
{
dp[i][j]=max(dp[i][j],dp[i-1][j-t[i]]+v[i]);
}
}
}
cout<<dp[M][T];
return 0;
}
二,dfs
#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
int te[100];
int value[100];
int maxx=0;
int t,m,i,j;
void dfs(int x,int sumt,int sumv)
{
if(x>m)
{
if(sumt<=t&&sumv&