题目描述
解题思路
这题就是一个裸的完全背包,太水了,直接跳过吧。
状态转移方程:
d
p
[
j
]
=
m
a
x
(
d
p
[
j
]
,
d
p
[
j
−
b
[
i
]
]
+
a
[
i
]
)
dp[j]=max(dp[j],dp[j-b[i]]+a[i])
dp[j]=max(dp[j],dp[j−b[i]]+a[i])
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int n,t;
long long dp[10000005],a[10000005],b[10000005];//开大点,别问我怎么知道的
int main(){
cin>>t>>n;
for(int i=1;i<=n;i++)
cin>>b[i]>>a[i];
for(int i=1;i<=n;i++){
for(int j=1;j<=t;j++){
if(j>=b[i])
dp[j]=max(dp[j],dp[j-b[i]]+a[i]);
}
}
cout<<dp[t];
return 0;
}
我是不会告诉你我数组开小RE了三次的
今天放假开心多水几篇