1、炉石传说
时间限制:c/c++语言1000MS;其他语言3000MS
内存限制:c/c++语言65536KB;其他语言589824KB
题目描述:
小明喜欢玩一款叫做炉石传说的卡牌游戏,游戏规则如下,玩家拥有N颗水晶和M张卡牌,每张卡牌的使用会消耗a颗水晶并且造成b的伤害值,请你帮小明算一下该如何使用手上的卡牌,在消耗小于等于N颗水晶的前提下造成最多的伤害值之和。
输入:
所有输入均为32位正整数
第一行N M
第二行到第M+1行 ai bi
输出:
对于每个测试实例,要求输出在消耗小于等于N颗水晶的前提下能造成的最多的伤害值之和;每个测试实例的输出占一行。
样例输入:
10 4
5 7
2 3
8 10
3 4
样例输出:
14
思路:背包问题
c++代码:
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main(){
int n,m; //n颗水晶,m张卡牌
while(cin>>n>>m){
vector<int> a; //消耗的水晶
vector<int> b; //b伤害值
for(int i=0;i<m; i++){
int tmp;
cin>>tmp;
a.push_back(tmp);
cin>>tmp;
b.push_back(tmp);
} //输入数据
vector<int> dp(n+1,0);
int res=-1;
for(int i=0;i<m;i++){
for(int j=n;j>=a[i];j--){
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
res=max(res,dp[j]);
}
}
cout<<res<<endl;
} //while
return 0;
}
2、赛车手
题目描述:
小奇是一名赛车手,他正在准备一次赛车比赛,这次比赛总共需要在赛场中跑n圈,而赛车手需要每隔一段时间就进站一次,进行换胎和加油等工作。假定小奇的赛车最多跑3圈就必须进站一次,问他总共有多少种进站策略?
输入:
输入1个整数,表示比赛的圈数。它的值大于1小于30.
输出:
为1个数字,表示进站策略的数量。
样例输入:
3
样例输出:
4
思路:dp问题,类似于leetcode的377题http://blog.csdn.net/xiaoquantouer/article/details/52222437?locationNum=1
c++代码:
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n; //表示比赛的圈数
while(cin>>n){
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<int> dp(n+1, 0);
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=0; j<nums.size(); j++){
if(i>=nums[j]){
dp[i]+=dp[i-nums[j]];
}
}
}//for
cout<<dp[n]<<endl;
} //while
return 0;
}