1 Star 0 Fork 1

saigon/Algorithms

forked from charlieshu/Algorithms 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
P1064 [NOIP2006 提高组] 金明的预算方案.cpp 1.14 KB
一键复制 编辑 原始数据 按行查看 历史
charlie 提交于 2024-01-09 00:01 . move from github to gitee
#include <iostream>
#include <math.h>
#include <string.h>
#include <stack>
#include <queue>
using namespace std;
struct item{
int weight,value,father;
queue<int> son;
};
int main(){
int n,m;
cin>>n>>m;
stack<int> sta;
item a[m+1];
int dp[m+1][n+1];
memset(dp,0,sizeof(dp));
a[0].value = 0;
a[0].weight = 0;
for(int i=1;i<=m;i++){
int w,v,f;
cin>>w>>v>>f;
a[i].weight = w;
a[i].value = v*w;
a[i].father = f;
a[f].son.push(i);
}
sta.push(0);
// int i=0;
while(!sta.empty()){
// i++;
// cout<<i<<endl;
if(!a[sta.top()].son.empty()){
int index;
sta.push(a[index=sta.top()].son.front());
a[index].son.pop();
continue;
}
int now=sta.top();
if(now == 0)
break;
for(int i=n-a[now].weight;i>=0;i--){
for(int j=0;j<=i;j++)
dp[a[now].father][i+a[now].weight] = max(dp[a[now].father][i+a[now].weight],dp[a[now].father][i-j]+dp[now][j]+a[now].value);
}
sta.pop();
}
// for(int i=0;i<=m;i++){
// for(int j=0;j<=n;j++)
// cout<<dp[i][j]<<" ";
// cout<<endl<<endl;
// }
cout<<dp[0][n];
return 0;
}
/*
10 5
3 5 0
4 2 0
3 5 2
3 4 2
6 4 0
*/
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/saigonshu/algorithm.git
git@gitee.com:saigonshu/algorithm.git
saigonshu
algorithm
Algorithms
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385