动态规划是一种很奇妙的解题方式,刚开始接触发现很神奇,但是自己又解不出来,哈哈
我认为动态规划的核心是定义状态和总结状态的变化关系
先mark下后续补
区间动态规划
312. 戳气球
486. 预测赢家
664. 奇怪的打印机
牛客网华为机试HJ16
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int N,m;
cin>>N>>m;
N /= 10;
int price[61][3] = {0};
int weight[61][3] = {0};
int count = 1;
for(int i=1;i<=m;++i){
int a,b,c;
cin>>a>>b>>c; a /= 10;
if(c==0){
price[i][0] = a;
weight[i][0] = a*b;
}else{
if(price[c][1]){
price[c][2] = a;
weight[c][2] = a*b;
}else{
price[c][1] = a;
weight[c][1] = a*b;
}
}
}
int dp[61][3201] = {0};
for(int i=1;i<=m;++i){
for(int j=1;j<=N;++j){
if(price[i][0]>0 && j>=price[i][0]){
int a1 = price[i][0], a2 = weight[i][0];
int b1 = price[i][1], b2 = weight[i][1];
int c1 = price[i][2], c2 = weight[i][2];
dp[i][j] = max({dp[i-1][j],
dp[i-1][j-a1]+a2,
j>=a1+b1? dp[i-1][j-a1-b1]+a2+b2: 0,
j>=a1+c1? dp[i-1][j-a1-c1]+a2+c2: 0,
j>=a1+b1+c1? dp[i-1][j-a1-b1-c1]+a2+b2+c2: 0
});
}else{
dp[i][j] = dp[i-1][j];
}
}
}
cout<<dp[m][N]*10<<endl;
}
点位动态规划
买卖股票时机系列
309. 最佳买卖股票时机含冷冻期