class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
*
* @param grid int整型 vector<vector<>>
* @return int整型
*/
int minPathSum(vector<vector<int> >& grid) {
// write code here
int n=grid.size();
if(n==0) return 0;
int m=grid[0].size();
// cout<<n<<" "<<m;
// vector<vector<int>>v=
vector<vector<int>>f(n,vector<int>(m,0));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
f[i][j]=grid[i][j];
if(i==0&&j==0) continue;
else if(i==0) f[i][j]+=f[i][j-1];
else if(j==0) f[i][j]+=f[i-1][j];
else {
f[i][j]+=min(f[i-1][j],f[i][j-1]);
}
}
}
// cout<<f[n-1][j-1];
return f[n-1][m-1];
}
};
2
class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
*
* @param goods_list int整型 vector 商品价值
* @param balance int整型 余额
* @return int整型
*/
int pickGoods(vector<int>& goods_list, int balance) {
int n=goods_list.size();
vector<int>f(balance+1);
for(int i=0;i<n;i++){
for(int j=balance;j>=goods_list[i];j--){
f[j]=max(f[j],f[j-goods_list[i]]+goods_list[i]);
}
}
cout<<f[balance];
return f[balance];
// write code here
}
};
3
class Solution {
public:
/**
* Note: 类名、方法名、参数名已经指定,请勿修改
*
*
* 计算摆动序列的最长子序列的长度
* @param nums int整型 vector 摆动序列
* @return int整型
*/
int wiggleMaxLength(vector<int>& nums) {
// write code here
int n=nums.size();
vector<vector<int>>f(n,vector<int>(2,1));//以nums[i]为终点的点 减前面前一个符号是负数0 正号1的答案
// cout<<"a";
for(int i=0;i<nums.size();i++){
if(i==0) f[i][0]=f[i][1]=1;
else if(i==1){
if(nums[1]!=nums[0]){
if(nums[1]-nums[0]>0)
{
f[i][1]=2;//正数
// f[i][1]=1;
}
if(nums[1]-nums[0]<0){
f[i][0]=2;//负数
}
}
else
f[i][0]=f[i][1]=1;//相等就只能是他自己
}
else
for(int j=0;j<i;j++){
if(nums[i]-nums[j]>0){
f[i][1]=max(f[i][1],f[j][0]+1);
}else if(nums[i]-nums[j]<0){
f[i][0]=max(f[i][0],f[j][1]+1);
}
}
}
int res=0;
// cout<<"b";
for(int i=0;i<nums.size();i++){
for(int j=0;j<2;j++){
// cout<<f[i][j]<<" ";
res=max(f[i][j],res);
}
// cout<<endl;
}
return res;
}
};