宁为玉碎,不为瓦全!oj.aicoders.cn
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int w[10],p[10];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>w[i]>>p[i];
}
//物品数量
for(int i=0;i<=n;i++){
//背包容量
for(int j=0;j<=6;j++){
//如果背包容量为0 或者物品数量为0
if(i==0 || j==0){
a[i][j] = 0;
} //如果背包容量放不下当前物品 继承上方单元格的最大价值
else if(w[i] > j){
a[i][j] = a[i-1][j];
}//能够放下
else{
//不妨当前物品的最大价值 放当前物品的最大价值
a[i][j] = max(a[i-1][j],a[i-1][j-w[i]]+p[i]);
}
}
}
cout<<a[n][6];
return 0;
}
#include <bits/stdc++.h>
using namespace std;
stack ty;
int main(){
int n;
cin>>n;
if(n==0){
cout<<0;
return 0;
}
while(n){
ty.push(n%2);
n/=2;
}
int l=ty.size();
for(int i=0;i<l;i++){
cout<<ty.top();
ty.pop();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
//记录洞的状态 下标-编号 元素-洞的状态 1-被搜查过 0-没有搜查过
int a[35];
int main(){
//洞的数量
int n;
cin>>n;
//定义查找次数
int i=10000;
//定义当前搜查的洞口编号
int m = 1;
//跳过的洞口数
int s = 2;
//当前搜查过的洞口数量
int cnt = 0;
while(i--){
//所有洞口都查过了
if(cnt == n){
cout<<"It is nice!";
return 0;
}
//防止m超过n的范围
m%=n;
if(m==0){
m=n;
}
//判断当前洞口是否搜查过
if(a[m] == 0){
a[m] = 1;
cnt++;
}
//计算下一个搜查的洞口编号
m += s;
s++;
}
for(int i=1;i<=n;i++){
if(a[i]==0){
cout<<i<<' ';
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
string str;
cin>>str;
//求和变量
int sum = 0,j = 1;
for(int i=0;i<str.length()-1;i++){
if(str[i]>='0' && str[i]<='9'){
sum += (str[i]-'0')*j;
j++;
}
}
//判断计算的识别码是否为10
char x;
if(sum%11 == 10){
x = 'X';
}else{
x = (sum%11)+'0';
}
//判断最后一位是被码是否符合
if(str[str.length()-1] == x){
cout<<"Right";
}else{
for(int i=0;i<str.length()-1;i++){
cout<<str[i];
}
cout<<x;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,flag = 0;//0-没有找到 1-找到了
int a[15][15];
//记录走过的路的状态 1-走过了 0-没有走过
int vis[10][10];
//方向数组
int dx[5] = {-1,1,0,0};
int dy[5] = {0,0,-1,1};
//深度优先遍历
void dfs(int x,int y){
//2.判断退出条件
if(a[x][y] == a[n][n]){
flag = 1;
return ;
}
//3.枚举所有可能性(四个方向)
for(int i=0;i<4;i++){
int xx = x+dx[i];
int yy = y+dy[i];
//4.验证可能性
if(xx>=0 && xx<n && yy>=0 && yy<n && a[xx][yy] != 1 && vis[xx][yy] != 1){
vis[xx][yy] = 1;
dfs(xx,yy);
//回溯
vis[xx][yy] = 0;
}
}
return ;
}
int main(){
//迷宫的边界
cin>>n;
//给迷宫赋值
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
//如果第一步就是假山
if(a[0][0] == 1){
cout<<"NO";
return 0;
}
//1.开始深搜(确认深搜的起始坐标)
vis[0][0] = 1;
dfs(0,0);
if(flag == 1){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}
/*
5
0 1 0 1 0
0 0 0 0 0
0 1 1 0 1
0 0 1 0 1
0 1 0 0 2
*/
#include <bits/stdc++.h>
using namespace std;
int n,flag = 0;//0-没有找到 1-找到了
int a[10][10];
//记录走过的路的状态 1-走过了 0-没有走过
int vis[10][10];
//方向数组
int dx[5] = {-1,1,0,0};
int dy[5] = {0,0,-1,1};
//起始坐标 终点坐标
int sx,sy,ex,ey;
void dfs(int x,int y){
//2.判断结束条件
if(x == ex && y == ey){
flag = 1;
return ;
}
//3.枚举所有可能性
for(int i=0;i<4;i++){
int xx = x+dx[i];
int yy = y+dy[i];
//4.验证可能性
if(xx>=0 && xx<n && yy>=0 && yy<n && a[xx][yy] != 0 && vis[xx][yy] != 1){
vis[xx][yy] = 1;
dfs(xx,yy);
}
}
}
int main(){
//迷宫的边界
cin>>n;
//给迷宫赋值
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
sx-=1;
sy-=1;
ex-=1;
ey-=1;
if(a[sx][sy] == 0 || a[ex][ey] == 0){
cout<<"NO";
return 0;
}
//1.开始深搜
vis[sx][sy] = 1;
dfs(sx,sy);
if(flag == 1){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}